Java复制数组中的引用

时间:2015-02-09 04:00:40

标签: java arrays object reference

我无法理解复制引用对数据造成的影响。 我有一个对象数组。 此数组是另一个类的另一个对象的属性。

我需要通过其中一个属性对数组中的对象进行排序。

我想知道这样做的最佳和最合适的方法是什么。

让我们说出以上内容:

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. 

3 个答案:

答案 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 对数组进行就地排序。您不需要创建新数组并将引用复制到新数组中,并将新数组引用再次分配给原始数组引用(如示例中所示),因为它会导致浪费空间。