Arrays.sort(myarray)物理上改变了数组?

时间:2016-08-08 07:03:17

标签: java

请帮助我了解这里发生了什么:

Main.java:

int[] myarray = new int[125];
// setup the array here, code omitted. 

int minimum = ProcessArray.min(myarray );


// the array values will now print as if they have been sorted...
for(int I=0; I<myarray.length;i++) {
   System.out.Println(myarray[i]);
}

ProcessArray.java

import java.util.Arrays;

public class ProcessArray {
  public static int min(int[] anarray){
     Arrays.sort(anarray);
     return anarray[0];
  }


}

找到数组的最小值后,数组将按排序顺序打印。

为什么数组按排序顺序重新排列?

2 个答案:

答案 0 :(得分:1)

将数组传递给函数时,它是myarray的引用而不是克隆/副本

您的最小函数对数组进行了排序,因此在调用之后对其进行排序

您可以手动克隆数组以保留原始数组

int minimum = ProcessArray.min(myarray.clone()); 或使用Arrays.copyOf(..)

请记住,克隆/副本是一个&#34;浅拷贝&#34;如果它是一些对象的数组,那么对象仍然是相同的......

看一下这个问题Is Java "pass-by-reference" or "pass-by-value"?

答案 1 :(得分:1)

根据javadoc Arrays.sort方法将按升序对数组中的元素进行排序。

如果您希望阵列不应重新排列,并且您需要在阵列中找到最小值和最大值,则可以使用如下所示,

Integer[] a = {3,5,1,2,4};

for (int i = 0; i < a.length; i++)
{
    System.out.println(a[i]);
}

System.out.println("max :"+Collections.max(Arrays.asList(a)));
System.out.println("min :"+Collections.min(Arrays.asList(a)));

System.out.println("after find min and max array :"+ Arrays.asList(a));

使用不会重新排列数组的集合。