为此创建TreeSet或任何集合的副本

时间:2011-06-24 17:32:39

标签: java collections

我有一个自定义对象的树集。每个自定义对象由int a,int b,String c和double d组成。假设我有一个包含10个这样的自定义对象的treeSet对象t1。我还有另一个TreeSet对象t2是空的。将treeset t1中的对象复制到treeset t2中的最佳方法是什么...我想在t2中使用新对象,而不仅仅是引用t1中的对象。一种方法是在t2中创建10个新对象并复制所有值t1中10个对象中每个对象的a和b以及c和d,以及t2中的对象。有更好的方法吗?

5 个答案:

答案 0 :(得分:2)

这种技术被称为"深度复制"并且它上面有一个很好的Stack Overflow问题here

目前的前两个答案提供了两个好的观点:

  1. Serialize your objects然后反序列化它们(效率高,但不是100%可靠) - link to answer
  2. 或者您只需要遍历整个对象并手动完成(尽可能可靠,但不是非常简单) - link to answer

答案 1 :(得分:2)

for (Item item : collection) {
    newCollection.add(BeanUtils.cloneBean(item));    
}

其中BeanUtils来自commons-beanutils

答案 2 :(得分:1)

  1. 覆盖自定义对象中的clone()方法
  2. 迭代源集合
  3. 将克隆的项目添加到目标集合。

答案 3 :(得分:0)

取决于你的意思更好。最好的解决方案是使对象不可变,只需复制引用。

另一种方法是生成或编写复制构造函数。复制构造函数可以使用反射来复制所有字段。

对于您拥有的字段类型,您可以创建Object Cloneable并使用clone()方法。 (因为字段是基元或不可变的)

答案 4 :(得分:0)

你已经得到了答案。

但是,此过程最好在clone()方法中实现。所以你的所有对象都应该覆盖这个方法。

请在此处查看示例:http://www.roseindia.net/java/example/java/util/clone-method-example-in-java.shtml