更新Object中的ArrayList索引



我有一个数组列表与一堆MyObject对象。我想在我的对象中保留一个整数字段,作为这个对象在数组列表中的键,这样我就可以很容易地得到这个元素在数组列表中的位置。

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

我应该不删除元素,但覆盖他们与空(使索引不被移动),或者我应该通过ArrayList迭代一次删除后更新对象中的所有ID字段?

//编辑:我的目的:假设我从数组列表中获得一些对象并将它们插入到另一个列表中。稍后,当遍历第二个列表时,我想获得第一个数组列表中对象的键。所以我必须把键保存在对象上。在这种情况下,使用Map的好处在哪里?

这可以使用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);

每个键在映射上都是唯一的,所以如果你改变了它的值,它不会影响键。

在这种情况下,您可以存储一个null值的键。

否则,如果您删除索引,并重新放置它,将解决:

        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));
        }

但是我认为那张地图就是你要找的。第二种方法不是线程安全的,在并发线程

的情况下会导致崩溃

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

在您的例子中,您可以将id和对象存储为映射中的键、值对。从那里你可以直接访问相关id的对象。

相关内容

最新更新