数组

作者: 冯宏志 | 来源:发表于2020-11-23 23:24 被阅读0次

    数组

    一维数组
    • 初始化
      分为静态初始化和动态初始化
    package com.atguigu.contact;
    
    public class ArrayTest { 
        public static void main(String[] args) {
            int[] ids;  //声明
            ids = new int[]{1001,1002,1003,1004};//静态初始化。初始化和赋值同时进行
            String[] names = new String[5];//动态初始化,初始化和赋值分开进行
            //对数组赋值     
            names[0] = "小明";
            names[1] = "小红";
            names[2] = "小军";
            names[3] = "小方";
            //获取数组长度            
            System.out.println(ids.length);
            //遍历数组元素
            for(int i = 0;i < names.length;i++)
                System.out.println(names[i]);
        }
    
    }
    
    

    总结:数组一旦初始化完成,其长度确定

    • 数组元素的默认初始化值
      整形:0
      浮点型:0.0
      char型:0或'\u0000'而非‘0’
      boolean:false
      引用数据类型(如String):null

    • 数组的内存解析


      image.png
    二维数组
    • 初始化
    package com.atguigu.contact;
    
    public class ArrayTest1 {
        public static void main(String[] args) {
            //静态初始化
            int[][] arr = new int[][] {{1,2,3},{4,5},{6,7,8}};
            //动态初始化1
            int[][] arr1 = new int[3][2];
            //动态初始化2
            int[][] arr2 = new int[3][];
            //错误的情况
    //      String [][] arr3 = new String[][3];
    //      String [4][3] arr4 = new String[][];
    //      int [][] arr5 = new int[4][3] {{1,,2,3},{4,5},{6,7,8}};
        }
    }
     
    
    • 数组元素的默认初始化值
      针对初始化方式一:比如: int[][] arr = new int[4][3];
      外层元素的初始化值为:地址值
      内层元素的初始化值为:与一维数组初始化情况相同
      针对初始化方式二:比如 int[][] arr = new int[4][]
      外层元素的初始化值为:null
      内层元素的初始化值为;不能调用,否则报错

    • 二维数组内存解析


      image.png
    深复制与浅复制
    • 浅复制:只是把数组的地址复制了
    • 深复制:真正的复制
    package com.atguigu.contact;
    
    public class ArrayTest2 {
        public static void main(String[] args) {
            int[] array1,array2,array3;
            array1 = new int[]{1,2,3,4,5};
            //  浅复制
            array2 = array1;
            array1[0] = 10;
            for(int i = 0;i<array1.length;i++)
            {
                System.out.print(array1[i]);//10 2 3 4 5
                System.out.print(array2[i]);//10 2 3 4 5
            }
            array3 = new int[array1.length];
            //  深复制 
            for(int i = 0;i<array1.length;i++)
            {
                array3[i] = array1[i];
                System.out.println(array3[i]);
            }
        } 
    }
    
    

    Arrays工具类的使用

    • boolean equals(int[] a,int[] b) //判断两数组是否相等
      String toString(int[] a) //输出数组信息
      void fill(int[] a,int val) //将指定值填充到数组之中
      void sort(int[] a) //对数组进行排序
      int binarySearch(int[] a,int key) //对排序后的数组进行二分法检索指定的值
    package com.atguigu.contact;
    
    import java.util.Arrays;
    
    public class ArrayTest3 {
        public static void main(String[] args) {
            //boolean equals(int[] a,int[] b)判断两数组是否相等
            int[] arr1 = new int[]{1,2,3,4};
            int[] arr2 = new int[]{1,3,2,4};
            boolean isEqual = Arrays.equals(arr1, arr2);
            System.out.println(isEqual);//false
            //String toString(int[] a)输出数组信息
            System.out.println(Arrays.toString(arr1));//[1, 2, 3, 4]
            //void fill(int[] a,int val)将指定值填充到数组之中
            Arrays.fill(arr1, 5);
            System.out.println(Arrays.toString(arr1));//[5, 5, 5, 5]
            //void sort(int[] a)对数组进行排序
            int[] arr3 = new int[] {5,3,6,7,8,1,10};
            Arrays.sort(arr3);
            System.out.println(Arrays.toString(arr3));//[1, 3, 5, 6, 7, 8, 10]
            //int binarySearch(int[] a,int key)对排序后的数组进行二分法检索指定的值
            System.out.println(Arrays.binarySearch(arr3, 3));
        }
    }
    
    

    数组常见异常

    1.数组角标越界异常:ArrayIndexOutOfBoundsException
    2.空指针异常:NullPointerException


    image.png

    相关文章

      网友评论

          本文标题:数组

          本文链接:https://www.haomeiwen.com/subject/ldhpsktx.html