1

我有一个带有一堆 MyObject 对象的 ArrayList。我想在我的对象中保留一个整数字段,它是该对象在 ArrayList 中的键,以便我可以轻松获取该元素在 ArrayList 中的位置。

当我从这个 ArrayList 中删除一个对象时,这会出现问题,因为索引会向左移动。避免此问题的最佳方法是什么?

我应该不删除元素,而是用 null 覆盖它们(以便索引不会移动)还是应该在一次删除后遍历 ArrayList 以更新对象中的所有 ID 字段?

//编辑:我的目的:假设我得到了该 ArrayList 的一些对象并将它们插入到另一个列表中。稍后在遍历第二个列表时,我想获取第一个 ArrayList 中对象的键。所以我必须把钥匙保存在对象上。在这种情况下使用地图有什么好处?键只是自增整数。

4

2 回答 2

3

这可以使用 Map - HashMap

例子:

Map<Integer, MyObject> map = new HashMap<Integer, MyObject>();
MyObject obj = new MyObject();
Integer key = new Integer("1234");
obj.setKey(key);
map.put(obj.getKey(), obj);

要检索对象,请调用:

MyObject result = map.get(key);

result = null;

map.put(key, result);

每个键在地图上都是唯一的,因此,如果您更改值,它不会影响键。

在这种情况下,您可以存储具有空值的键。

否则,如果您删除一个索引,然后重新放置,将解决:

        List<String> list = new ArrayList<String>();
        list.add("ONE");
        list.add("TWO");

        for (int index = 0; index < list.size(); index ++) {
            // remove the index that you will change to null
            list.remove(index);
            // put a null object in that index
            list.set(index, null);
            System.out.println(list.get(index));
        }

但我认为这就是你要找的地图。第二种方法不是线程安全的,并且在并发线程的情况下会导致崩溃

于 2013-05-24T19:35:59.590 回答
2

你最好使用Map。Map 是将键映射到值的对象。它不能包含重复的键;每个键最多可以映射到一个值。

因此,在您的情况下,您可以将 id 和对象作为键值对存储在地图中。从那里您可以直接访问相关 id 的对象。

于 2013-05-24T19:31:13.503 回答