我有一个ArrayList
l1
大小10.我分配l1
给新列表引用类型l2
.威尔l1
和l2
指向同一个ArrayList
对象吗?或者是ArrayList
分配给的对象的副本l2
?
使用l2
引用时,如果我更新列表对象,它也会反映l1
引用类型中的更改.
例如:
List<Integer> l1 = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
l1.add(i);
}
List l2 = l1;
l2.clear();
Run Code Online (Sandbox Code Playgroud)
除了创建2个列表对象以及对从旧到新的集合进行复制之外,没有其他方法可以将列表对象的副本分配给新的引用变量吗?
Jon*_*eet 429
是的,分配将刚刚复制值的l1
(这是引用)l2
.它们都会引用同一个对象.
创建浅拷贝非常简单:
List<Integer> newList = new ArrayList<>(oldList);
Run Code Online (Sandbox Code Playgroud)
(就像一个例子.)
Ser*_*huk 67
尝试使用 Collections.copy(destination, source);
Alf*_*rio 31
是的l1
并且l2
将指向相同的参考,相同的对象.
如果要基于另一个ArrayList创建新的ArrayList,请执行以下操作:
List<String> l1 = new ArrayList<String>();
l1.add("Hello");
l1.add("World");
List<String> l2 = new ArrayList<String>(l1); //A new arrayList.
l2.add("Everybody");
Run Code Online (Sandbox Code Playgroud)
结果将l1
仍然有2个元素,l2
并将有3个元素.
Har*_*are 19
将值从src ArrayList复制到dest Arraylist的另一种方便方法如下:
ArrayList<String> src = new ArrayList<String>();
src.add("test string1");
src.add("test string2");
ArrayList<String> dest= new ArrayList<String>();
dest.addAll(src);
Run Code Online (Sandbox Code Playgroud)
这是对值的实际复制,而不仅仅是复制引用.
小智 7
有一个方法addAll(),它将用于将One ArrayList复制到另一个ArrayList.
例如,您有两个数组列表:sourceList和targetList,使用下面的代码.
targetList.addAll(SOURCELIST);
归档时间: |
|
查看次数: |
320356 次 |
最近记录: |