玩命加载中 . . .

一维数组(27)


一维数组

​ 数组中存储元素的类型是统一的,每一个元素在内存中所占的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只知道下标就可以快速的计算出偏移量,通过首元素内存地址加上偏移量快速计算出要查找元素的内存地址,通过内存地址快速定位该元素,所以数组查找元素的效率较高随机的对数组进行增删元素,当增加的元素的时候,为了保证数组中元素在空间存储上是有序的,所以被添加元素位置后面的所有元素都要向后移动删除元素也是,后面所有的元素要向前移动。所以数组的增删元素的效率很低

静态数组

  • 创建静态数组语法:
        // 声名一个int类型的数组
        int[] a1 = {100200300400};
        // 声名一个boolean类型的数组
        boolean[] a2 = {truefalsetrue};
        // 声名一个String类型的数组
        String[] a3 = {"qqq""www""eee""rrr"};
        // 声名一个byte类型的数组
        byte[] a4 = {12345};
        // 声名一个char类型的数组
        char[] a5 = {'a''b''c''d'};
        // 声名一个object类型的数组
        Object o1 = new Object();
        Object o2 = new Object();
        Object o3 = new Object();
        Object o4 = new Object();
        Object[] a6 = {o1,o2,o3,o4};
  • 遍历数组及数组的length的用法:
        int[] in = {54321};
        // 数组length的用法
        System.out.println("数组中第一个元素为:" + in[in.length-5]);
        System.out.println("数组中最后一个元素为:" + in[in.length-1]);
        // 数组的修改:
        in[1] = 6;
        System.out.println("````````````````````");
        // 遍历数组:
        for(int i=0;i<in.length;i++) {
            System.out.println("数组的元素依次为:" + in[i]);
        }

动态数组

  • 动态初始化一维数组,会先在堆内存中分配这个数组,并且数组中每一个元素都采用默认值。
数据类型数据类型数据类型数据类型默认值
byteshortintlong0
floatdouble0.0
booleanfalse
引用类型null
  • 创建动态数组语法:

            // 动态声明一个int类型的数组,最多可以存储i个元素
            int[] a1 = new int[i];
            // 赋值 例如上面声名i个则最多可以创建i个元素
            a1[0] = 1;
            a1[1] = 2;
            a1[2] = 3;
            a1[3] = 4;
            // 遍历
            for (int i = 0; i < a1.length; i++) {
                System.out.println(a1[i]);
            }
    
  • 创建对象动态数组:

    // 创建对象动态数组
            Object[] a2 = new Object[4];
            for (int i = 0; i < a2.length; i++) {
                // a2[i].toString();
                // Exception in thread "main" java.lang.NullPointerException
                // 空指针异常
                Object o = a2[i];
                System.out.println(o);
                /**
                 * 使用a2[i].toString();与System.out.println(o);抛出异常的区别:
                 * 1.使用a2[i].toString();抛出空指针异常
                 * 2.System.out.println(o);直接抛出null是因为println()底层代码中有一个
                 * return (obj == null) ? "null" : obj.eoString();
                 * 所以使用第二种方法不会抛出Error
                 */
    
  • 什么时候使用动态初始化,什么时候使用静态初始化?

    1. 无论是动态初始化还是静态初始化,最终的内存分布都是一样的。
    2. 如果在创建数组的时候,知道数组中应该存储什么数据,这个时候当然采用静态初始化方式,如果在创建数组的时候,无法预测到数组中存储什么数据,只是先开辟空间,则使用动态初始化方式。
  • 数组的拷贝

    语法:

    System.arraycopy(数据源,源数组的开始下标,目标数组,目标数组的开始下标,拷贝长度);
    // 数据源是指拷贝的数据源,目标数组是指的是拷贝的指定数组
    
  • 示例:

            int[] src = {1,2,3,4,5,6,7};
            int[] dest = {10,11,12,13,14};
            // System.arraycopy(数据源,源数组的开始下标,目标数组,目标数组的开始下标,拷贝长度);
            // 数据源是指拷贝的数据源,目标数组是指的是拷贝的指定数组
             System.arraycopy(src,2,dest,2,2);
            for (int i = 0; i < dest.length; i++) {
                System.out.println(dest[i]);
            }
    

文章作者: 小靳同学
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小靳同学 !
评论
  目录