如何通过不真正更新str2
和str1
来更新仅str
?为什么str2
中的更改正在更新str1
和str
?是因为对象引用吗?
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class test {
List<HashMap<String, String>> str;
public static void main(String[] args) {
Map<String, String> hmap = new HashMap<String, String>();
hmap.put("1", "s1");
hmap.put("2", "s2");
test testobj = new test();
testobj.str = new ArrayList<HashMap<String, String>>();
testobj.str.add((HashMap<String, String>) hmap);
testing(testobj.str);
}
static void testing(List<HashMap<String, String>> str) {
List<HashMap<String, String>> str2 = new ArrayList<HashMap<String, String>>();
List<HashMap<String, String>> str1 = str;
str2.add(str1.get(0));
str2.get(0).put("1", "new");
System.out.println(str);
System.out.println(str1);
System.out.println(str2);
}
}
答案 0 :(得分:0)
您必须像这样创建原始List<HashMap<String, String>> str1 = new ArrayList<>(str);
的副本:
ArrayList
创建一个新的List
,其中包含原始stack
中的所有元素。这样,您就会有两个单独的列表,其中包含自己的元素。