我有一个数组列表与一堆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的对象。