如何复制java.util.list集合

我正在实现一个负责订购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;

}

回答:

您可以使用先前列表的输入来创建新列表,如下所示:

List one = new ArrayList()

//... add data, sort, etc

List two = new ArrayList(one);

这将使您可以独立于第一个列表修改顺序或包含哪些元素。

请记住,尽管两个列表将包含相同的对象,所以如果您在列表2中修改一个对象,则将在列表1中修改相同的对象。

例:

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;

}

以上是 如何复制java.util.list集合 的全部内容, 来源链接: utcz.com/qa/416323.html

回到顶部