当前位置: 首页 > 面试题库 >

如何复制java.util.list集合

池麒
2023-03-14
问题内容

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


 类似资料:
  • 我有一个 。 我尝试使用,但我在代码的后面得到了一个。点击并试用。:) 不管怎样,我的问题很简单,我如何将我的列表的全部内容复制到另一个列表中?当然,不是通过迭代。

  • http://ehcache.org/generated/2.9.0/html/ehc-all/#page/ehcache_documentation_set%2fco-use_supported_types.html%23wwconnect_header EHCache2.9中的这篇文档说明它将支持RMI、JGroups和JMS。但是,很明显,Ehcache-2.9 JAR中的API已经改变,文

  • List是一个java集合,它按顺序存储元素并允许重复元素。 该界面的用户可以精确控制列表中的每个元素的插入位置。 用户可以通过整数索引访问元素,并搜索列表中的元素。 更正式地,列表通常允许元素对e1和e2成为e1.equals(e2),并且如果它们根本允许空元素,则它们通常允许多个空元素。 List与映射表中的元素映射,并使用java.util.ArrayList初始化。 定义RDBMS表 (D

  • 使用C在同一台服务器上复制Mongodb中的集合的正确方法是什么?MongoVUE有一个选项“Duplicate collection”,C有类似的选项吗?

  • 问题内容: 如何将Scala转换为Java ? 问题答案: Scala List和Java List是两种不同的野兽,因为前者是不可变的,而后者是可变的。因此,要从一个到另一个,首先必须将Scala列表转换为可变集合。 在Scala 2.7上: 从Scala 2.8开始: 但是,在该示例中,如果期望的类型是Java则没有必要,因为转换是隐式的,如最后一行所示。

  • 问题内容: 有没有办法复制?也就是说,有可能去 还是您需要物理遍历这些集合并一一复制? 问题答案: 另一种方法是使用复制构造函数: 或创建一个空集并添加元素: 与这些不同,您可以使用不同的集合类,不同的比较器,甚至使用其他(非集合)集合类型填充。 请注意,复制a的结果是一个新的,包含对作为原始元素的对象的引用。元素对象本身不会被复制或克隆。这符合Java API设计的工作方式:它们不复制元素对象。