• 数据结构之数组


    数组(Array)

    • 概念

      同一种类型数据的集合。其实数组就是一个容器。数组的本质就是堆内存中的一块连续的存储空间。

      

    • 定义

        动态初始化命名:数据类型 [ ] 数组名 = new 数据类型 [数组的长度]

    int[] array = new int[5];

        

        静态初始化命名:数据类型 [ ] 数组名 = new 数据类型 [ ] {x,y,z,a,b,c...}(可省略写为:数据类型 [ ] 数组名 = {x,y,z,a,b,c...})

    int [] array = new int[]{1,2,3,4,5};
    //
    int [] array = {1,2,3,4,5};

        

        定义了一组数组之后,系统为每个元素指定一个索引值,索引值是从0开始的

        数组名其实就是一个变量名,保存数组的引用(数组的起始地址),new 运算符会在堆内存中分配一块连续的空间,把这块连续的空间的引用保存到数组名中

     

    • 数组的扩容

       理论上来说,数组定义后就无法扩容了;但我们可以换个思路:定义一个更大的数组,把原来数组的内容复制到新的数组中,让数组名指向新的数组

      使用System.arrayCopy(src,srcPos,dest,destPos,length)方法:

    int [] array = new int[]{1,2,3};
    int [] newArray = new int[6];
    System.arraycopy(array, 0, newArray, 0, array.length);
    System.out.println(Arrays.toString(newArray));
    //结果:[1, 2, 3, 0, 0, 0]

      解释一下各参数的含义:把src数组从srcPos开始的length个元素复制到dest数组的destPos位置

      还可以使用:Arrays.copyOf(原来的数组,新数组的长度)方法,为了证实数组引用指向的地址改变了,我打印了出来:

    int [] array = new int[]{1,2,3};
    System.out.println("扩容前的地址:"+ array.toString());
    //扩容前的地址:[I@15db9742
    array = Arrays.copyOf(array, 2*array.length);
    //扩容后的地址:[I@6d06d69c
    System.out.println("扩容后的地址:"+ array.toString());
    System.out.println(Arrays.toString(array));
    //结果:[1, 2, 3, 0, 0, 0]

      这也证实了,数组在定义后,是无法扩容的;想要进行扩容,就必须创建新的数组对象

    • 数组的遍历

      for循环遍历

    int [] array = new int[]{1,2,3};
    for(int i = 0;i < array.length;i++){
        System.out.println(array[i]);
    }

       foreach循环:

        int [] array = new int[]{1,2,3};
            for (int i : array) {
                System.out.println(i);
            }
    • 数组的优缺点  

      优点:按照索引查询元素速度快 ;按照索引遍历数组方便;数组的大小固定后便无法扩容

      缺点:数组只能存储一种类型的数据 ,添加,删除的操作慢,因为要移动其他的元素。

      适用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况

     

     

  • 相关阅读:
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
    Live2D 看板娘
  • 原文地址:https://www.cnblogs.com/javaisbest/p/12909631.html
Copyright © 2020-2023  润新知