请帮助我了解这里发生了什么:
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];
}
}
找到数组的最小值后,数组将按排序顺序打印。
为什么数组按排序顺序重新排列?
答案 0 :(得分:1)
将数组传递给函数时,它是myarray
的引用而不是克隆/副本
您的最小函数对数组进行了排序,因此在调用之后对其进行排序
您可以手动克隆数组以保留原始数组
int minimum = ProcessArray.min(myarray.clone());
或使用Arrays.copyOf(..)
请记住,克隆/副本是一个&#34;浅拷贝&#34;如果它是一些对象的数组,那么对象仍然是相同的......
答案 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));
使用不会重新排列数组的集合。