JavaSE基础入门_006_数组

数组

数组的概念

为什么使用数组

  • 如何储存100名学生的成绩?

    • 办法:使用变量储存,重复声明100个double类型变量即可。

    • 缺点:麻烦,重复操作过多

  • 如何让100名学生成绩全部 +1 ?

    • 办法:100个变量重复相同操作,直至全部完毕

    • 缺点:无法进行统一的操作

 

  • 数组概念:一组连续的存储空间,存储多个相同数据类型的值。

    • 特点:

      1. 类型相同

      2. 长度固定

数组的声明与赋值

数组的创建

1 //数据类型[] 变量名 = new 数据类型[长度];
2 int[] nums = new int[5];

数组的使用

  • 数组的每个数据格被称为“数组元素”。

  • 对每个元素进行赋值或取值的操作被称为“元素的访问”。

  • 访问元素时,需要使用“下标”(从0开始,依次+1,自动生成)。

  • 访问的语法:数组名[下标];//例如 存:a[0] = 10; 取:a[0];

 

 

数组的下标

下标的范围

  • 有效下标范围: 0 ~ 数组长度-1

  • 访问无效下标, 会导致数组下标越界[编译可以通过, 运行时会异常]

 

数组的遍历

  • 遍历: 从头至尾, 逐一对数组的每个元素进行访问.

  • 数组名.length 可动态获得数组长度

 

数组的默认值

  • 在没有为数组元素赋值的情况下, 依旧可以正确访问.

  • 数组默认值:

    • 数据类型默认值
      整数 0
      小数 0.0
      字符 \u0000
      布尔 false
      其他 null

 

数组创建语法

  • 先声明, 再分配空间:

    • 数据类型[ ] 数组名;

    • 数组名 = new 数据类型[长度];

  • 声明并分配空间:

    • 数据类型[ ] 数组名 = new 数据类型[长度];

  • 声明并赋值(繁): // 推荐用法, 可换行

    • 数据类型[ ] 数组名 = new 数据类型[ ]{ value1, value2, value3, ... } ;// 长度就是值的数量

    • 换行操作:

    • 1 int[] intArray;
      2 intArray = new int[]{11,22,33,44}
      3 =====上下两种方式等价=====
      4 int[] intArray = new int[]{11,22,33,44}
      
      
  • 声明并赋值(简):

    • 数据类型[] 数组名 = { value1, value2, value3, ... }; //显式初始化, 注意: 不可换行

数组的扩容

  • 非java官方提供的方式, 我们自己应用的一种方式.

  • 创建数组时, 必须显示指定长度, 并在创建之后不可更改长度

  • 扩容思路:

    • 创建大于原数组长度的新数组

    • 将原数组中的元素依次复制到新数组中

复制的方式

  • 循环将原数组中所有元素逐一赋值给新数组.

  • System.arraycopy( 原数组, 原数组起始, 新数组, 新数组起始, 长度 );
    // 长度: 要拷贝元素的个数

     

  • java.util.Arrays.copyOf(原数组, 新长度); //返回带有原值的新数组
    //实际操作步骤:
    //1.导包:
    import java.util.Arrays;
    //2.调用函数:
    int[] newArray =  Arrays.copyOf(oldArray, oldArray.length*2);

     

地址的替换

  • 数组作为引用类型之一, 其变量中存储的是数组的地址.

  • 完成元素复制后, 需将新数组地址, 赋值给原变量进行替换.

 

数组类型的参数

  • 赋值 == 复制

  • 数组直接赋值: 将原变量的地址复制给新变量. 此时二者指向同一个数组.

 

数组类型的返回值

  • 创建新数组, 长度为原数组的2倍, 新数组中保留原有数据, 返回新数组

 

可变长参数

  • 概念: 可接受多个同类型的实参, 个数不限, 使用方式与数组相同.

  • 语法:数据类型... 形参名 // 必须定义在形参列表的最后, 且只能有一个.

public static void  printArray(int... array)
    {
        for(int i = 0; i< array.length; i++)
        {
            System.out.print(array[i]+", ");
        }
    }

 

 

数组的排序

冒泡排序: 相邻的两个数值比较大小, 互换位置

  • // 外层还剩多少个数需要比较, 比较的次数 = 还剩数的个数 - 1
    for(int i = 0;i < array.length - 1;i++)
            {
                // 内层(每一轮的操作)i
                for(int j = 0; j < array.length - 1 - i; j++)
                {
                    if(array[j]>array[j+1])
                    {
                        int temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                    }
                }
            }

     

     

 

选择排序: 固定值与其他值依次比较大小, 互换位置

  • for(int i  = 0; i < nums.length-1; i++)
            {
                //每次比较: 固定值与固定值后面的第一个值开始
                for(int j = i + 1; j < nums.length ;j++)
                {
                    
                    if(nums[i] > nums[j])
                    {
                        int temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                    }
                    
                }
            }

     

 

  • JDK排序: 

    java.util.Arrays.sort( 数组名 ); // JDK只提供 ( 升序 )

     

 

二维数组

  • 概念: 一维数组中的一维数组; 数组中的元素, 还是数组.

二维数组的赋值

  • 使用双下标访问二维数组中的元素

    • 第一个下标代表: 行号 (高维下标),

    • 第二个下标代表: 列号 (低维下标)

二维数组的内存分配

  • int array[3][5]; // 定义一个三行五列的二维数组 array
  • 高维数组中的每一个元素, 保存了低维数组的地址. 访问 array[0] 等价于访问 array中第一个一维数组的地址

二维数组的创建语法

  • 先声明, 在分配空间:

    • 数据类型[ ][ ] 数组名;
      数组名 = new 数据类型[高维长度][低维长度];
  • 声明并分配空间:

    • 数据类型[][] 数组名 = new 数据类型[高维长度][低维长度];
  • 声明并赋值(繁):

    • 数据类型[][] 数组名 = new 数据类型[高维长度][]; 
      // 不规则数组,自行 new 低维数组, 自行指定低维数组长度
      int[][] array = new int[3][];
              array[0] = new int[3];
              array[1] = new int[4];
              array[2] = new int[5];
  • 声明并赋值(简):

    • 数据类型[][] 数组名 = new int[][]{{v1,v2,v3},{v4,v5},{v6,v7,v8,v9}}; //显示初始化
      // 实例
      int[][] nums = new int[][]{{1,2,3},{4,5},{6,7,8,9,0}};

 

总结

  • 数组的概念:

    • 一组连续的存储空间, 存储多个相同数据类型的值

  • 数组的声明与赋值:

    • 数据类型[] 数组名 = new 数据类型[长度];

    • 数组名[下标] = 值;

  • 数组的遍历:

    • 从头至尾, 逐一对数组的每个元素进行访问

  • 数组的排序:

    • 冒泡排序, 选择排序, JDK快速排序

  • 数组的应用:

    • 数组复制, 数组扩容, 数组参数, 数组返回值,二维数组

posted @ 2020-05-14 15:39  云川望雨  阅读(81)  评论(0编辑  收藏  举报