【Java基础】异或特点+交换变量数值+数组反转

发布时间 2023-11-19 17:10:18作者: 沙汀鱼

异或特点

  1. 二进制位不同为true,相同为false
  2. 一个数被另外一个数异或两次,该数不变

交换变量数值

  • 利用上述异或第2个特点实现
交换两个整数类型变量数值 代码
public class Xor {

    public static void main(String[] args) {
        int a = 10, b = 4;

        a = a ^ b;
        b = a ^ b;  // b = (a ^ b) ^ b = a
        a = a ^ b;  // a = (a ^ b) ^ a = b


        System.out.println("a: " + a);
        System.out.println("b: " + b);
    }


}

数组反转

  • 方法1 通过第2个数组实现数组反转
  • 方法2 通过上述交换变量数值的方法,将数组进行首尾数值交换,从而实现数组反转
数组反转 代码
public class ReverseArray {
    public static void main(String[] args) {
        int[] arr = {11, 22, 33, 44, 55};
//        arr = reverseArray(arr);
//        reverse(arr);
        reverse2(arr);
        for (int item : arr) {
            System.out.print(item + " ");
        }
    }
    
    /*通过交换首尾数值,直接进行数组反转*/
    public static void reverse(int[] arr) { // 实现方式1
        int lim = arr.length / 2;
        for (int i = 0; i < lim; i++) {
            int j = arr.length - i - 1;
            arr[i] = arr[i] ^ arr[j];
            arr[j] = arr[i] ^ arr[j];
            arr[i] = arr[i] ^ arr[j];
        }
    }
    public static void reverse2(int[] arr) { // 实现方式2
        int i = 0, j = arr.length - 1;
        while(i != j) {
            arr[i] = arr[i] ^ arr[j];
            arr[j] = arr[i] ^ arr[j];
            arr[i] = arr[i] ^ arr[j];
            ++ i;
            -- j;
        }
    }

    /*利用第2个数组来实现数组反转*/
    public static int[] reverseArray(int[] a) {
        int[] ra = new int[a.length];
        for (int i = 0; i < ra.length; i++) {
            ra[i] = a[a.length - i - 1];
        }
        return ra;
    }

}