zoukankan      html  css  js  c++  java
  • 数组的特性与扩容缩容

         数组是一组数据的集合,在定义数组时必须指定其大小,数组的随机访问是个常量时间,每一个数组都内置了一个成员变量 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}};
     
  • 相关阅读:
    angular----关于注入HTML
    js ---- 时间格式
    JQuery的父、子、兄弟节点查找方法
    js中的时间与毫秒数互相转换
    $.each ---- 跳出当前的循环
    关于ng-model取不到值的问题
    IOS 物理引擎
    斯坦福 IOS讲义 课件总结 三
    斯坦福 IOS讲义 课件总结 二
    斯坦福 IOS讲义 课件总结 一
  • 原文地址:https://www.cnblogs.com/128-cdy/p/11716030.html
Copyright © 2011-2022 走看看