Java列表实例在复制后保留其指针

P b*_*sak 2 java collections reference list

我有以下LinkHashMap,

LinkedHashMap<String, ArrayList<String>> test1=new ...
Run Code Online (Sandbox Code Playgroud)

在循环中,我像这样分配键值对,

ArrayList<String> temp=new ...
//start iteration
temp.add("some strings")
test1.put("some string", temp);
temp.clear()//temp is cleared for next iteration
Run Code Online (Sandbox Code Playgroud)

这里temp是我之前创建的临时列表,并为其添加内容.但问题是,当我清除temp时,传递给test1temp也被清除,这意味着它被引用复制.如何在test1中使用temp仍然保持其引用.我知道这是一个基本概念,但我是java的新手,并没有完成它的所有功能.

pic*_*ypg 6

那是因为你并没有真正复制List,temp.您正在复制指针(Java术语中的"引用").

这里有两个简单的解决方案:

  1. 将您List使用的实际副本new ArrayList<String>(temp)作为您在地图中存储的内容.
  2. 而不是做temp.clear(),做temp = new ArrayList<String>().

第二种选择是最好的,因为它没有复制任何东西; 它只是用新鲜的方式替换参考ArrayList.