如何复制的java.util.List集合(How to copy java.util.list C

2019-07-29 06:37发布

我在执行负责订购的java.util.List的Java类。 问题是当我使用这个类。 我能订购清单,但我要复制的“原始”列表不加修改,这样我可以注册原始名单作出的每个改变。 排序后的列表包含对象及其字段的一个存储分类ID,并且这个ID它与列表的索引值更新。

我试图用克隆方法和它保持未排序列表中,但原来的名单上所做的更改在克隆列表也更新了。

有什么办法来完成它?

我的代码:

List<Torero> listaTorero = tbTlgTorerolHome.findByExample(new Torero());
List<Torero> listaToreroTemp = ((List<Torero>) ((ArrayList<Torero>) listaTorero).clone()); 

Clasificacion clasificacion = new Clasificacion();

Iterator<Torero> iterTorero = clasificacion.getClasificacion(listaTorero, torero).iterator(); //Sorting List

分类方法:

public List<Torero> getClasificacion(List<Torero> listaToreroTemp, Torero torero)
{

    List<Torero> listaTorero = new ArrayList<Torero>();

    Collections.sort(listaToreroTemp,new ToreroClasifiacionComparator());

    Iterator<Torero> iterTorero = listaToreroTemp.iterator();
    int index=1;
    while(iterTorero.hasNext())
    {
        Torero toreroTemp = iterTorero.next();
        toreroTemp.setNumClasificacion(index);
        listaTorero.add(toreroTemp);
        index=index+1;
    }
    return listaTorero;
}

Answer 1:

您可以创建与以前的列表,像这样的输入一个新的列表:

List one = new ArrayList()
//... add data, sort, etc
List two = new ArrayList(one);

这将允许你修改订单或者什么elemtents包含独立于第一名单。

请记住,这两个列表将包含相同的对象了,所以如果修改列出两种对象,相同的对象会在列表中的一个进行修改。

例:

MyObject value1 = one.get(0);
MyObject value2 = two.get(0);
value1 == value2 //true
value1.setName("hello");
value2.getName(); //returns "hello"

编辑

为了避免这种情况,你需要每个元素的深层副本列表如下所示:

List<Torero> one = new ArrayList<Torero>();
//add elements

List<Torero> two = new Arraylist<Torero>();
for(Torero t : one){
    Torero copy = deepCopy(t);
    two.add(copy);
}

通过类似以下的副本:

public Torero deepCopy(Torero input){
    Torero copy = new Torero();
    copy.setValue(input.getValue());//.. copy primitives, deep copy objects again

    return copy;
}


Answer 2:

使用ArrayList的拷贝构造函数,然后那种。

List oldList;
List newList = new ArrayList(oldList);
Collections.sort(newList);

制作副本之后,到newList任何更改都不会影响oldList,

但是请注意,只有在引用复制,所以这两个列表共享相同的对象,所以一个列表的元素所做的更改影响其他的元素



文章来源: How to copy java.util.list Collection
标签: java clone