2017-01-23 86 views
-1

我正在制作自己的anythink,它实现了Comparable接口。算法看起来不错,但Comparable a = list.get(i);是一个链接,但我需要这个对象的副本。我无法使用list.get(i).copy(),因为它对于Comparable没有定义。如何在Java中复制对象

private static void sortIncrease(ArrayList<Comparable> list) { 
    int i, j; 

    for (i = 1; i < list.size(); i++) { 
     Comparable a = list.get(i); 

     for (j = i - 1 ; j >= 0 ; j = j - 1) { 
      int cmpResult = a.compareTo(list.get(j)); 

      if (cmpResult < 0) { 
       list.set(j + 1, list.get(j)); 
      } else { 
       list.set(j+1, a); 
       break; 
      } 
     } 
    }  
} 
+5

为什么你需要一个对象的副本?如果这是一种排序算法,那就没有必要。 – Kayaman

+0

对,你通常不复制对象,你复制参考。 “Comparable”通常是参数化的。例如。 '可比较'。不要使用原始类型。 – markspace

+0

我不能参数化,因为我真的不知道,它是什么。它可能是一个字符串,或者一个int,或者其他的。 @markspace –

回答

-1

我可以建议你一个“坏方法”来做到这一点,创建你自己的克隆方法。 您可以:

-Take作为输入,其他的参数可比性和克隆他们到你的对象

-create提供您的参数,并在构造函数后插入的方法。