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;
}