如何将List <Integer>的值而不是引用复制到另一个列表中?

san*_*one 17 java arraylist

也就是说,在不引用同一对象的情况下,我需要将一个列表的元素值复制到另一个列表中.这些是列表:

List<Integer> listA = new ArrayList<Integer>();
List<Integer> ListB = new ArrayList<Integer>();

listA = (added some values);

listB = (do what?)...
Run Code Online (Sandbox Code Playgroud)

PS.我为初学者的问题道歉,但我从未做过这样的事情.

JB *_*zet 22

绝对没有理由复制整数.整数是一个不可变的类.这意味着它的值在创建Integer实例时设置,并且永远不会更改.因此,可以毫无顾虑地由多个列表和线程共享整数引用,因为任何人都无法更改其值.因此,你的问题没有任何意义.

要创建b包含与另一个List相同的Integers 的ArrayList a,只需使用以下代码:

List<Integer> b = new ArrayList<Integer>(a);
Run Code Online (Sandbox Code Playgroud)

当然整数不会被克隆,但这是一件好事,因为克隆它们是完全没必要的.

  • 但是这样,清除列表b也会清除列表a,对吧?我想阻止这个列表,其中一个列表是备份列表. (2认同)
  • 为什么会这样?您有两个列表实例.你用它做什么不会影响另一个.此构造函数的javadoc说:*按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表.* (2认同)
  • 我不知道为什么这不是答案 (2认同)

npi*_*nti 17

您可以尝试查看Collections.copy方法:

public static void copy(List dest,List src)

将一个列表中的所有元素复制到另一个列表中.在操作之后,目标列表中每个复制元素的索引将与源列表中的索引相同.目标列表必须至少与源列表一样长.如果它更长,则目标列表中的其余元素不受影响.此方法以线性时间运行.

参数:dest - 目标列表.src - 源列表.

注意:上述内容适用于简单数据类型(如整数),但是,如果您有自己的对象,而这些对象可能会引用其他对象,则必须迭代每个对象并单独复制它.

  • 看起来很棒。descr 没有说明这是复制值还是引用? (2认同)

kap*_*and 6

使用此方法Collections类ArrayList中的所有元素复制到另一个的ArrayList:

Collections.copy(listA, listB); 
Run Code Online (Sandbox Code Playgroud)