假设我有一个像这样的递归函数
public void someRecur(List<Integer>someList){
if(someBreakCondition)
Set.add(someList);
for(int i = 0; i < someLen ; i++){
someList.add(someInt);
someRecur(someList);
someList.remove(someInt);
}
}
remove 会影响已经放入集合中的列表吗?我应该怎么做才能为集合提供列表的实际副本?
最佳答案
您不会将对象放入 map ;您将 引用 添加到堆中的对象。
Java 数据结构包含对对象的引用,而不是对象本身。如果您从数据结构中删除引用,其他对象可能仍具有该引用的副本。
如果两个对象持有对一个可变对象的引用,那么每个对象都会看到另一个对象所做的更改。 (这就是线程安全很重要的原因。)
当没有人引用堆上的一个对象时,它就有资格进行 GC。
关于java - HashSet 是否制作添加对象的内部副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13047757/