Java - 包含对原始列表的引用的克隆列表
Java - Clone list that holds references to original List
我不知道如何在 Java 中复制列表。我有这个代码:
List<String> copy = new ArrayList<String>(original);
这会创建一个名为 copy 的新列表,它只包含对原始列表中对象的引用吗? (这就是我要的)。还是会生成新的字符串对象并耗尽不必要的内存?
当我从副本列表中删除项目时,这是否只会删除一个引用而不是从两个列表中删除该对象?
感谢阅读!
copy
列表将包含对相同 String
对象的引用。这被称为浅拷贝。它不会创建元素的副本;它将创建对元素的引用的副本。
original --> [ + + + ]
| | |
v v v
"one" "two" "three"
^ ^ ^
| | |
copy --> [ + + + ]
当您从一个列表中删除一项时,您只是从该列表中删除了引用。另一个列表中的相应引用仍然完好无损。
original --> [ + + + ]
| | |
v v v
"one" "two" "three"
^ ^
| |
copy --> [ + + ]
它创建了一个全新的 ArrayList,其中填充了原始 String 对象。您可以通过使用 ==
运算符比较实例 ("memory locations") 来验证这一点:
original.get(0) == copy.get(0) // true
.remove
方法仅从您调用它的列表中删除元素。它不会在可能使用它的任何地方将它从存在中炸掉(而且你实际上不能在 Java 中这样做)。由于 copy
列表是一个全新的列表,而不是 original
列表的 "backed",因此从原始列表中删除某些内容不会影响副本。
我不知道如何在 Java 中复制列表。我有这个代码:
List<String> copy = new ArrayList<String>(original);
这会创建一个名为 copy 的新列表,它只包含对原始列表中对象的引用吗? (这就是我要的)。还是会生成新的字符串对象并耗尽不必要的内存?
当我从副本列表中删除项目时,这是否只会删除一个引用而不是从两个列表中删除该对象?
感谢阅读!
copy
列表将包含对相同 String
对象的引用。这被称为浅拷贝。它不会创建元素的副本;它将创建对元素的引用的副本。
original --> [ + + + ]
| | |
v v v
"one" "two" "three"
^ ^ ^
| | |
copy --> [ + + + ]
当您从一个列表中删除一项时,您只是从该列表中删除了引用。另一个列表中的相应引用仍然完好无损。
original --> [ + + + ]
| | |
v v v
"one" "two" "three"
^ ^
| |
copy --> [ + + ]
它创建了一个全新的 ArrayList,其中填充了原始 String 对象。您可以通过使用 ==
运算符比较实例 ("memory locations") 来验证这一点:
original.get(0) == copy.get(0) // true
.remove
方法仅从您调用它的列表中删除元素。它不会在可能使用它的任何地方将它从存在中炸掉(而且你实际上不能在 Java 中这样做)。由于 copy
列表是一个全新的列表,而不是 original
列表的 "backed",因此从原始列表中删除某些内容不会影响副本。