从列表中删除对象后,将对象保留在地图中

时间:2016-09-09 15:03:17

标签: java arraylist collections

使用以下代码后,我从Map中删除了List中的对象,但我希望将其保留在Map中:

ArrayList<object> myList= new ArrayList<>();
Map<String, ArrayList<object>> map = new HashMap<String, ArrayList<object>>();

myList.add(object);
map.put(key1,myList);
map.get(key1); // return [object]
myList.remove(get(index));
map.get(key1); // return []

5 个答案:

答案 0 :(得分:0)

您必须在列表副本上执行删除操作:

List<object> myList2 = new ArrayList<>(myList);
myList2.remove(get(index));

答案 1 :(得分:0)

您似乎正在将对象从列表中发送到地图,即通过引用。您可能希望尝试创建具有相同值的新对象并将其发送到地图,而不是使用相同的对象引用。这可能是你的问题。

答案 2 :(得分:0)

ArrayList<object> myList = new ArrayList<>();
Map<String, ArrayList<object>> map = new HashMap<String, ArrayList<object>>();

myList.add(object);
map.put(key1, new ArrayList<>(myList));
map.get(key1);
myList.remove(get(index));
map.get(key1);

阅读此主题可能很有用Is Java “pass-by-reference” or “pass-by-value”?

答案 3 :(得分:0)

添加列表后,地图中的列表和单个列表具有相同的内存地址。因此,单个列表中的更改也将反映在地图中列表的更改中。

因此,在将列表添加到地图之前,您必须创建列表的副本。

或者另一种解决方案是,您可以在将列表添加到地图后克隆地图。

答案 4 :(得分:0)

这意味着你想要完成的是获取没有该对象离开列表的对象。

只需使用

 ArrayList.get(indexOfObjectToGet);

 //not 
 ArrayList.remove(indexOfObjectToGet);