Java - 包含对原始List的引用的克隆列表

时间:2015-03-13 18:45:46

标签: java list copy clone

我不确切知道如何复制Java中的List。我有这段代码:

List<String> copy = new ArrayList<String>(original);

这是否会创建一个名为copy的新List,它只保存对原始列表中对象的引用? (这就是我要的)。或者它会创建新的字符串对象并耗尽不必要的内存?

当我从副本列表中删除项目时,这只会删除引用而不是从两个列表中删除该对象吗?

感谢阅读!

2 个答案:

答案 0 :(得分:6)

copy列表将包含对相同String个对象的引用。这称为浅拷贝。它不会创建元素的副本;它将创建对元素的引用的副本。

original -->  [ +      +       +  ]
                |      |       |
                v      v       v
               "one"  "two" "three"
                ^      ^       ^
                |      |       |
    copy -->  [ +      +       +  ]

从一个列表中删除项目时,仅从该列表中删除该引用。其他列表中的相应参考文献仍然完好无损。

original -->  [ +      +       +  ]
                |      |       |
                v      v       v
               "one"  "two" "three"
                ^      ^
                |      |
    copy -->  [ +      +  ]

答案 1 :(得分:1)

它创建一个全新的ArrayList,其中填充了原始的String对象。您可以使用==运算符来比较实例(&#34;内存位置&#34;)来验证这一点:

original.get(0) == copy.get(0) // true

.remove方法仅从您调用它的列表中删除该元素。它不会在任何可能被使用的地方爆炸它(并且你实际上不能在Java中这样做)。并且因为copy列表是一个全新的列表而不是&#34;支持&#34;在original列表中,删除原始内容不会影响副本。