Java数组的扩容、翻转、删除

123 阅读1分钟

1.数组扩容

因为数组的长度是固定不变的,所以想要实现数组扩容,我们需要创建一个新的数组来帮助我们,并且新数组长度要比原数组+1。

示范代码如下:

        // 数组扩容
        int[] arr = {1,2,3,4,5};
        
        System.out.println("请输入要添加的数:");
        int num = sc.nextInt();
        
        int[] arr1 = new int[arr.length + 1];
        
        for(int i = 0; i < arr.length; i++) {
            arr1[i] = arr[i];         //将原数组长度部分 依次拷贝
        }
        arr1[arr1.length - 1] = num; //在新数组最后位置上加上要添加的数
        
        arr = arr1; 
        
        System.out.println(Arrays.toString(arr));

输出结果:

图解过程:

2.数组翻转

第一种方法:

将数组长度除以二,以中间为界,将左右两端的元素依次交换,如:下标0与下标arr.length - 1互换,下标1与下标arr.length - 2互换,以此类推。

代码如下:

        int[] arr = {1,2,3,4,5};
        
        for(int i = 0; i < arr.length / 2; i++) {//数组两端互换
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 -i];
            arr[arr.length - 1 -i] = temp;
        }
        
        System.out.println(Arrays.toString(arr));

运行结果:

图解过程:

第二种方法:

新建一个相同长度的数组,逆序遍历原数组并拷贝过来。代码如下:

        int[] arr = {1,2,3,4,5};
        int[] arr1 = new int[arr.length];
        
        for(int i = arr.length - 1, j = 0; i >= 0; i--, j++) {// i 和 j两个变量 分别用于旧数组和新数组
            arr1[j] = arr[i];
        }
        
        arr = arr1;
        System.out.println(Arrays.toString(arr));

运行结果:

图解过程:

3.数组删除元素

第一种方法:

输入要删除的下标,新建一个长度-1的数组。遍历新数组,当i小于要删除的下标index时,正常拷贝过来,当i大于等于index时,新数组下标i拷贝原数组的下标i+1。

        int[] arr = {1,2,3,4,5};
        
        System.out.println("请输入要删除的下标:");
        int index = sc.nextInt();
        
        int[] arr1 = new int[arr.length - 1];
        
        for(int i = 0; i < arr1.length; i++) {
            if(i < index) {
                arr1[i] = arr[i];
            }
            if(i >= index) {
                arr1[i] = arr[i + 1];  //新数组下标i拷贝原数组的下标i+1
            }
        }
        arr = arr1;
        
        System.out.println(Arrays.toString(arr));

运行结果:

图解过程:

第二种方法:

这种方法和第一种本质上一样,只不过是定义了一个辅助变量c,遇到要删除的下标后c++,以此来实现通过c的变化控制拷贝的数组元素下标。

        int[] arr = {1,2,3,4,5};
        
        System.out.println("请输入要删除的下标:");
        int index = sc.nextInt();
        
        int[] arr1 = new int[arr.length - 1];
        
        int c = 0;   //定义一个辅助变量c  来控制
        for(int i = 0; i < arr1.length; i++) {
            if(i == index) {
                c++;   //当遇到要删除的下标, c++
            }
            arr1[i] = arr[i + c];
        }
        
        arr = arr1;
        System.out.println(Arrays.toString(arr));

运行结果: