如何使用Java Arrays.sort

时间:2011-08-29 13:50:41

标签: java arrays sorting

我正在学习Arrays.sort(...)如何在Java中工作。

为什么变量:tempdopas都在排序temp之后排序?

System.out.println("Before");
for (int i = 0; i < POP; i++)
  System.out.println(dopas[i]+"");           //dopas is unsorted

System.out.println("After");
float[] temp=dopas;
Arrays.sort(temp);                           //sort temp

for (int i = 0; i < POP; i++)
  System.out.println(temp[i]+" "+dopas[i]);  //Both temp and dopas are now sorted

我预计多巴仍未分类。

13 个答案:

答案 0 :(得分:22)

数组是Java中的对象,因此在使用数组变量时,实际上是使用对数组的引用。

因此行

float[] temp=dopas;

只会将引用复制到数组dopas。之后,dopastemp指向同一个数组,因此在使用sort()后,它们都会显示为已排序。

使用System.arrayCopyArrays.copyOf创建数组的副本。

答案 1 :(得分:7)

您的作业:float[] temp=dopas;实际上只是复制对数组的引用。我认为你想做的是float[] temp = dopas.clone();

答案 2 :(得分:6)

temp只是对dopas的引用。实际上内存中只有一个数组。

如果您希望temp成为dopas的副本,请尝试:

float[] temp = Arrays.copyOf(dopas, dopas.length);

这样,您将深层复制您的数组,而不是浅层复制它!

答案 3 :(得分:3)

因为在Java中,您通过引用访问数组,而不是按值

因此tempdopas都是对同一数组的引用。

答案 4 :(得分:3)

  

为什么在Array.sort后两个数组都被排序?

因为只有一个数组。 float[] temp=dopas;不会创建新数组或复制现有数组内容。它只是复制一个数组引用 ...这样你就可以在两个地方引用同一个数组。

答案 5 :(得分:2)

当您为temp赋值dopas时,它不会复制,它会使变量引用相同的数组。

答案 6 :(得分:2)

因为temp和dopas(我们称之为变量)是指向内存空间的指针。通过使用代码

float[] temp = dopas

你只是说让“temp”指向内存中与dopas相同的空间。所以结果是你有两个指向内存中相同空间的指针。通过对temp进行排序,您将对该空间的内容进行排序,以便稍后在您访问完全相同的数据的代码中引用dopas。

PS:Dogmatixed提到了解决问题的方法。

答案 7 :(得分:1)

因为两个数组temp和dopas是相同的。赋值temp=dopas;指定对数组的引用。它不会复制其内容。这就是为什么当您对第一个进行排序时也会对第二个进行排序的原因。

答案 8 :(得分:1)

dopastemp引用相同的数组,可以互换使用。

float[] temp=dopas;

在此行之后,temp[i]将与dopas[i]完全相同。

答案 9 :(得分:1)

因为temp和dopas是对同一个数组的两个引用

答案 10 :(得分:1)

temp正在引用dopas,所以当dopas被排序时也是如此。他们实际上是指向同一个array.hope这有帮助。

答案 11 :(得分:0)

temp和dopas共享相同的指针,因为你没有创建一个新的数组实例,你只需指定相同的指针。

答案 12 :(得分:0)

temp dopas 引用相同的数组。

如果你想让temp像新数组一样运行,那么使用 clone()方法。

float[] temp = dopas.clone();

clone()方法创建一个新数组,并将dopas的内容复制到新创建的数组中。