数组的特性与扩容缩容

     数组是一组数据的集合,在定义数组时必须指定其大小,数组的随机访问是个常量时间,每一个数组都内置了一个成员变量 length,表示数组的总长度;数组增加元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间线性时;数组删除元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间线性时间,数组的元素查找花费时间也为线性时间。

数组的初始化:

1.  int[] arr1 = {1,2,3,4,5};    

2.  int[] arr2 = new int[]{1,2,3,4,5};

数组的输出与扩容缩容:

import java.util.Arrays;
import java.util.Random;
public class ArrayTestUnit {
    public static void main(String[] args) {
//定义数组
        int[] arr = new int[100];
//产生100~200之间的随机数放入数组
        Random rd = new Random();
        for (int i = 0; i < 100; i++) {
            arr[i] = rd.nextInt(101) + 100;
        }

        // 输出数组方式一   标准for循环
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] % 2 == 0) {
                System.out.print(arr[i] + " ");
            }
        }
        System.out.println();

        // 输出数组方式二   foreach  arr.length
        for (int val : arr) {
            if (val % 2 == 0) {
                System.out.print(val + " ");
            }
        }
        System.out.println();

        /**
         * int[] arr = new int[100];   arr[100] - arr[199]
         * 向上面的arr数组再放100个元素(放【0,50】之间的随机整数),
         * 然后把数组进行打印输出
         */

        // 先扩容
        // 1 先开辟新数组
        // int[] newArr = new int[2*arr.length];
        // 2 把旧数组的值都拷贝到新数组当中
        // for (int i = 0; i < arr.length; i++) {
        // newArr[i] = arr[i];
        // }
        // 3 让arr指向新数组
        // arr = newArr;

        // Arrays.copyOf 可以做数组的扩容和缩容
        arr = Arrays.copyOf(arr, arr.length * 2);
  

        // 然后再给新的数组继续添加数据
        for (int i = 100; i < arr.length; i++) {
            arr[i] = rd.nextInt(51);
        }

        // 输出数组
        /*for(int val : arr){
            System.out.print(val + " ");
        }
        System.out.println();*/
        // Arrays.toString输出数组元素的内容
        System.out.println(Arrays.toString(arr));

        // 操作完成,把数组的每一个元素的值重置为0

        /*for (int i = 0; i < arr.length; i++) {
            arr[i] = 0;
        }*/

        Arrays.fill(arr, 0);    //与上面代码效果相同

        // 往数组添加50个整数1-50,每次添加新元素都从数组的0号位置进行添加
        int count = 0;
        for (int i = 0; i < 50; i++) {
            // 先把数组中所有的元素都往后挪动一下
            for (int j = count; j > 0; j--) {
                arr[j] = arr[j - 1];
            }

            // 再把数据放到0号位
            arr[0] = i + 1;
            // 更新元素个数
            count++;  // arr.length
        }

        for (int i = 0; i < count; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();

        // 把第21号位元素从arr里面删除,重新输出arr数组的元素值
        for (int i = 21; i < count - 1; ++i) {
            arr[i] = arr[i + 1];
        }
        count--;
        for (int i = 0; i < count; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();

        // 在数组中查找46,是一个线性时间
        for (int i = 0; i < count; ++i) {
            if (arr[i] == 46) {
                System.out.println("find 46!!!");
                break;
            }
        }

        // 把arr缩容到有效元素的个数 
        arr = Arrays.copyOf(arr, count);

           }
}

 补充:

数组的辅助类Arrays
     * Arrays.copyOf 数组的扩容和缩容
     * Arrays.toString 打印数组元素   
     * Arrays.deepToString 打印二维数组元素的值
     * Arrays.fill 给数组填充初始化值
     * Arrays.equals 比较两个数组的内容是否相同

  二维数组:
二维数组的初始化:
int[][] arr = new int[4][];
arr[0] = new int[]{12};
arr[1] = new int[]{8,9};
arr[2] = new int[]{11,7,16};
arr[3] = new int[]{13,9,8,7};

下面的代码与上面的效果相同:int[][] arr = {{12},{8,9},{11,7,16},{13,9,8,7}};
 
原文地址:https://www.cnblogs.com/128-cdy/p/11716030.html