将ArrayList复制到Hashmap并重置Arraylist

时间:2016-09-18 22:33:24

标签: java arraylist hashmap

我正在尝试将一个ArrayList添加到HashMap中,稍后我将ArrayList引用到另一个对象。

但是当我更改ArrayList的内容时,它也会反映在HashMap值中

示例:

       HashMap<Interger, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>();

       List<String> list1 = new ArrayList<String>();
       list1.add("cat");
       map.put(1, list1); 

       list1 = new ArrayList<String>();

       list1.add("dog");
       map.put(2, list1);

现在地图上只有#34;狗&#34;进入它,它确实有&#34; cat&#34;条目。

我不想创建一个名为list2的新名称的ArrayList来保存&#34; dog&#34;条目。

我在循环中使用它,所以我只需要一个像... list1一样的ArrayList变量...我想把数据放到HashMap中,继续....

list1 = new ArrayList(); 并在其中存储新值并将其放入HasnMap。

如何通过仅使用一个ArrayList变量将值正确地放入HashMap?

1 个答案:

答案 0 :(得分:1)

首先,无法将地图声明为接收:HashMAP<Integer,ArrayList<String>> 并为其添加一个列表参数:map.put(1, list1),  即使Arraylist 列表,也请查看 java generics ,以了解为什么在generics中禁止它。

我测试了您的代码,即使您为变量设置了一个新实例:list1, 之前添加到map的实例不会从中删除:

ArrayList<String> list1 = new ArrayList<String>();
   list1.add("cat");
   map.put(1, list1); 

   list1 = new ArrayList<String>();

   list1.add("dog");
   map.put(2, list1);
   System.out.println(map.get(1).get(0)+" "+map.get(2).get(0));

将返回:“猫狗”