我无法理解复制引用对数据造成的影响。 我有一个对象数组。 此数组是另一个类的另一个对象的属性。
我需要通过其中一个属性对数组中的对象进行排序。
我想知道这样做的最佳和最合适的方法是什么。
让我们说出以上内容:
class Group{
Single [] one;
public Group(){
one = new Single[10]; //creating array of type Single.
//...for loop will assign new objects to each index of one.
现在我需要对该数组进行排序。我怎么能这样做?如果我创建一个新数组,对它进行排序,那么我将如何将其保存为Group对象的属性?
可以做这样的事吗?:
Single [] sorted=new Single [10];
Single [] sorted=new Single [10];
sorted[0] = one[2];
sorted[1] = one[4];//....
//and then overwrite one?
one = sorted //pardon me for the syntax.
答案 0 :(得分:0)
执行此操作时:
sorted[0] = one[2];
由于sorted[0]
和one[2]
包含相同的对象引用,如果您更改其中一个数组中此引用的状态,则此更改将反映在另一个数组中数组也是如此。
执行此操作时:
one = sorted
您不会修改数组中的任何对象,而是更改one
变量的值。
由于您需要/需要对数组进行排序,因此无需使用备用数组。相反,在同一个数组中进行排序。
如果您只是担心如何对数组进行排序,请使用Arrays#sort(Comparator<? extends Single>)
。否则,在此数组中使用您自己的排序算法,而不是使用新数组(除非您希望/需要使用不可变元素)。
答案 1 :(得分:0)
作为一般方法,您可以使用Arrays.sort
对数组进行排序,即数组中元素的顺序会发生变化。您需要提供Comparator<Single>
才能正常工作。
我建议你试试并发布代码,如果你不能使它工作(在一个单独的问题中)。
答案 2 :(得分:0)
由于您希望对对象中的数组进行排序,因此最好使用 Arrays.sort 对数组进行就地排序。您不需要创建新数组并将引用复制到新数组中,并将新数组引用再次分配给原始数组引用(如示例中所示),因为它会导致浪费空间。