我尝试检查传递的数组是否已排序:
public static boolean isSorted(int[] list){
boolean isSorted = true;
int[] arr = list;
selectionSort(arr);
for (int i = 0; i < list.length; i++) {
if (arr[i] != list[i]){
isSorted = false;
break;
}
}
return isSorted;
}
我传递了数组list
并使数组arr
等于list,发生的事情是数组list
在排序后变得等于数组arr
。
什么是Java规则?以及如何将arr
与list
分开?
答案 0 :(得分:4)
int[] arr = list;
不复制数组,只是声明一个指向同一个数组实例的变量。
您需要使用int[] arr = list.clone();
或int[] arr = Arrays.copyOf(arr, 0, arr.length);
。
但请注意,您不需要对数组进行排序以检查它是否已排序:只需检查每个元素以查看以下元素是否更小。
for (int i = 0; i < arr.length - 1; ++i) {
if (arr[i + 1] < arr[i]) return false;
}
return true;
答案 1 :(得分:0)
int[] arr = list;
以上行不会将list
复制到arr
,因为在java中,您可能有不同的结构来保存相同的数据,但在后端,它们都引用相同的数据对象。对arr
中的数据所做的更改也会显示在list
数据中,因为它们都引用了相同的数据。