Java数组的赋值、复制、反转、查找
赋值
数组作为引用类型,对其进行赋值后,两个数组变量引用同一个地址,修改其中一个数组变量值将会影响另外一个数组。
int[] arr = {1,3,5,7};
int[] arr2 = arr;
arr2[0] = 2;
System.out.println(arr[0]); // 2
复制
数组复制和赋值不一样,两个数组变量指向不同的地址,修改其中一个数组变量不会影响另外一个数组变量。
int[] arr = {1,3,5,7};
int[] arr2 = new int[arr.length];
for (int i = 0; i < arr.length; i ++) {
arr2[i] = arr[i];
}
arr2[0] = 2;
System.out.println(arr[0]); // 1
Arrays提供一个数组复制的方法copyOf
int[] arr = {1,3,5,7};
int[] arr2 = Arrays.copyOf(arr, arr.length);
反转
Arrays没有提供反转的方法,需要自己动手写下,也很简单。
public static int[] arrayReverse(int[] arr)
{
int[] newArr = Arrays.copyOf(arr, arr.length);
for (int i = 0; i < (newArr.length / 2); i++) {
int tmp = newArr[i];
newArr[i] = newArr[newArr.length - i - 1];
newArr[newArr.length - i - 1] = tmp;
}
return newArr;
}
二分法查找
使用二分法查找对数组有要求,数组必须是排好序的。
public static int binSearch (int[] arr, int item)
{
int pos = -1;
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == item) {
pos = mid;
break;
} else if (arr[mid] < item) {
low = mid + 1;
} else {
high = mid -1;
}
}
return pos;
}