繁体   English   中英

如何复制java.util.list集合

[英]How to copy java.util.list Collection

我正在实现一个负责排序java.util.List的Java类。 当我使用这个课时,问题出现了。 我能够订购列表,但我想复制“原始”列表而不进行修改,以便我可以注册原始列表中的每个更改。 排序列表包含对象,其中一个字段存储分类标识,此标识使用列表的索引值进行更新。

我尝试使用克隆方法,它保持列表未排序,但在原始列表上所做的更改也在克隆列表中更新。

有没有办法实现它?

我的代码:

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

Clasificacion方法:

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;
}

您可以创建一个新列表,其中包含前一个列表的输入,如下所示:

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

这将允许您修改顺序或包含的元素独立于第一个列表。

请记住,这两个列表将包含相同的对象,因此如果您修改List 2中的对象,则同一对象将在列表一中进行修改。

例:

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;
}

使用ArrayList复制构造函数,然后对其进行排序。

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

进行复制后,对newList的任何更改都不会影响oldList。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM