java中Collections.Copy(List b,List a)的大小错误

时间:2014-01-21 16:08:02

标签: java collections arraylist copy

我想将一个类列表复制到另一个类列表,但我有一个错误,表示目标列表大小为零,但我为目标列表初始化了大小。

public class Programs {

public Programs() {
    private int number;
    private String name;
    private int enterT;
    private int burstT;
    private int priority;
    ......
}


 public void SJF(List<Programs> progList){   
    List<Programs> tempProgListMin = new ArrayList<>(progList.size());
    Collections.copy(tempProgListMin, progList);
 }

我有错误,说tempProgListMin的大小是0并且小于progList的大小, 我想,我正确编写了代码,但我不知道它为什么会出错。 我需要一份副本,当我更改列表b中的内容(复制一份)时,列表A中没有任何更改 抱歉英语!

3 个答案:

答案 0 :(得分:1)

size()返回列表中元素数量,而不是您作为参数传递的 inicial capacity 。因此,tempProgListMin尺寸为0

您可以使用此重载的构造函数:

List<Programs> tempProgListMin = new ArrayList<>(progList);

来自Java Docs

  

public ArrayList(Collection c):   构造一个包含指定集合元素的列表,   按照它们由集合的迭代器返回的顺序。

答案 1 :(得分:0)

根据Collections.copy(destinationList,SourceList)方法的文档,

The destination list must be at least as long as the source list。因此,您的目标列表大小似乎为零且小于源列表的长度

答案 2 :(得分:0)

考虑我的例子

List<String> list1=new ArrayList<>();
list1.add("a");
list1.add("b");
list1.add("c");

List<String> list2=new ArrayList<>(list1);   

现在工作正常。

将您的代码更改为

List<Programs> tempProgListMin = new ArrayList<>(progList);