1. 数组

    程序 = 算法 + 数据结构;

    前面学过的if...else...、switch...、while循环、for循环等都是解决流程问题,即算法方面的问题。

    数据结构:就是把数据按照特定的某种结构来保存,而数组就是一种最基本的数据结构。

    1)数组的定义:

          相同数据类型的元素组成的集合,里面只能存放相同的数据类型的元素。

          数组的元素按照线性排列,即 One by One。

          数组元素可以通过序号(下标)来识别,下标从0开始,最大下标是数组的长度-1。

    2)数组的声明:

          //声明整型数组arr,包含3个元素,每个元素都是int型

          int[] arr = new int[3];  //arr中的每一个元素都默认为0

          数组变量arr不再是基本类型变量,而是引用类型的,引用一个内存地址,里面存放的是数组元素。

    3)数组的初始化: 

          int[] arr = {1,4,7};  // 静态初始化,只能在声明变量的同时直接赋值

          int[] arr ;

          arr = new int[3];  // 动态初始化,可依次进行元素赋值

          int[] arr = new int[]{1,4,7};  // 动态初始化,可在定义时候直接赋值

    4)数组的访问:

          通过下标来访问元素 ,下标从0开始,到arr的长度(length)-1 

          int[] arr = {1,4,7,8};

          System.out.println(arr.length); // 长度4

          arr[0] = 100; // 给arr中的第1个数赋值为100

          System.out.println(arr[3]); // 输出arr中的最后一个数

          arr[4] = 88; // 错误的,下标越界/超范围

          // 循环给数组元素赋值

          for(int i=0;i<arr.length;i++){

              arr[i] = 100;

          }

          // 循环输出数组

          for(int i=0;i<arr.length;i++){

              System.out.println(arr[i]);

          }

          // 倒序输出数组

          for(int i=arr.length-1;i>=0;i--){

              System.out.println(arr[i]);

           }


    案例25:

        Java基础学习笔记 -- 9(数组)_ 复制


    6)数组类型元素默认值

        根据数组类型的不同,默认初始化值为:0(整数)、0.0(浮点数)、false(布尔类型)、

        \u0000(char字符类型,显示无效果,相当于空格)、null(string类型,什么都没有,空值的意思)。


2. 数组工具类Arrays
    JDK提供的用来操作数组的工具类,提供了一些常用方法。

    int[] arr = {1,4,7,8};

    1)数组的输出

        String str = Arrays.toString(arr);

    2)数组的复制:

        注意: Arrays.copyOf(源数组, 新长度),返回新数组

            当新长度等于源数组长度时候,就是复制;

            当新长度大于源数组长度时候,扩容,前面内容是源数组内容,多出的内容采用数组元素类型默认值填充;

            当新长度小于源数组长度时候,截取,从下标0开始截取一定新长度的元素;


    案例26:

        Java基础学习笔记 -- 9(数组)_ 数组_02

    输出结果:

        Java基础学习笔记 -- 9(数组)_ 截取_03


        *************************************************************************************************************

          系统System还提供了一个数组的复制方法:

          System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

          src:源数组; srcPos:源数组要复制的起始位置; 

          dest:目标数组; destPos:目标数组放置的起始位置; 

          length:复制的长度。 

          只要下列任何情况为真,则抛出 IndexOutOfBoundsException 异常,并且不会修改目标数组:

            srcPos 参数为负。  

            destPos 参数为负。

            length 参数为负。

            srcPos+length 大于 src.length,即源数组的长度。

            destPos+length 大于 dest.length,即目标数组的长度。

        *************************************************************************************************************

    案例27:

        Java基础学习笔记 -- 9(数组)_程序_04



3)数组的排序:

         Arrays.sort(arr),无返回值


    案例28:

        Java基础学习笔记 -- 9(数组)_程序_05

    输出结果:

        Java基础学习笔记 -- 9(数组)_ 截取_06



3. 练习题


    案例29:

        Java基础学习笔记 -- 9(数组)_元素_07


    案例30:

     Java基础学习笔记 -- 9(数组)_ 截取_08