如何“克隆”对象列表而不取消引用项目本身

时间:2014-05-03 17:16:31

标签: java list copy clone dereference

我有2个ArayLists:ArrayList 1和ArrayList 2; 基本上,我需要像ArrayList 2 = new ArrayList(1);但如果我以任何方式更改第二个列表,第一个列表应保持不变,但如果我从第二个列表中更改项目,它也应该在第一个列表中修改。我已经尝试使用克隆,构造函数只复制一个对象的属性并创建另一个对象,并在第二个列表中添加,但每次我更改第二个列表时,第一个也会更改。 那么,我怎么才能拥有2个列表,它们起初具有相同的项目,顺序相同,但它们本身完全不同?只是将第一个列表中的每个项目添加到第二个列表都不起作用.. 示例:

ArrayList<Object> list1 = new ArrayList<Object>():
list1.add(obj1);
list1.add(obj2);
ArrayList<Object) list2 = new ArrayList<Object>(list1);
list2.remove(0);

我想要的是能够修改list2(list2.remove(0))但我需要list1保持不变,所以list1.size()!= list2.size()。另外:我需要list1中的obj1与list2中的obj1相同。

1 个答案:

答案 0 :(得分:0)

  

但如果我以任何方式更改第二个列表,第一个列表应保持不变

所以只需将引用复制到新列表中即可。有建设者。

  

但如果我从第二个列表中更改项目,它也应该在第一个列表中进行修改。

见上文。

  

我尝试过使用克隆,构造函数只复制一个对象的属性并创建另一个对象并在第二个列表中添加

这是你想要做的事情。您需要两个列表中的原始引用。

  

但每次我更改第二个列表时,第一个列表也会更改

不可能。如果您确实想要描述,那么这两个列表及其内容是完全独立的。无论如何,这是错误的做法。这也构成取消引用原始对象,你说你不想这样做。

  

只是将第一个列表中的每个项目添加到第二个列表都不起作用

是的。我建议你把所有这些替代品弄糊涂了。