0%

数组

一,概念和特点

概念:用于存储数据的容器

特点:

  1. 只能存储同一种数据类型的值(定义时明确了数组的数据类型后,该数组就只能存储这个类型的数据)
  2. 数组的长度是固定的

二,定义和创建

格式:

  1. ```java
    数据类型[] 数组名 = new 数据类型[长度];

    1
    2
    3

    2. ```java
    数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,...};
  2. ```java
    数据类型[] 数组名 = {值1,值2,值3,…};

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    ### 三,元素的获取和赋值

    下标

    下标也称为索引,本质上就是元素在数组中的位置,一般使用index

    特点:下标的范围是`[0,长度-1]`

    获取

    格式:

    ```java
    数组名[下标]

注:

  1. 如果获取数组中的元素时,下标超出了最大范围,会发生 ArrayIndexOutOfBoundsException数组下标越界异常
  2. 如果数组只定义了长度,没赋初始值,那么数组中的元素也会有默认值,默认值和数据类型相关
    1. 浮点类型的默认值是0.0
    2. 整数类型的默认值是0
    3. 字符类型的默认值是空格
    4. 布尔类型的默认值false
    5. 引用数据类型的默认值都是null

赋值

格式:

1
数组名[下标] = 值;

注意事项

  1. 下标的范围是[0,长度-1]

  2. 数组长度的获取方式:数组名.length

  3. 直接打印数组名输出的是数组在内存中的地址,如果输出的是char类型的数组名,输出的是数组中的值

  4. 数组的工具类Arrays中提供了toString()方法用于将数组以字符串形式返回

    1
    2
    3
    4
    5
    6
    7
    8
    double[] dd = new double[3];
    dd[0] = 1;
    dd[1] = 9;
    dd[2] = -8;
    System.out.println(dd);

    // 将数组以字符串的形式输出
    System.out.println(Arrays.toString(dd));// 要将哪个数组以字符串返回就将这个数组的名称写在toString()的括号中

四,数组的遍历

4.1 普通循环

4.2 增强循环(foreach)

格式:

1
2
3
for(数据类型 变量 : 容器){
// 这个变量接收的就是循环过程中从容器中获取到的元素
}

注:

  1. foreach只能遍历数组、集合
  2. foreach中没有下标的概念
  3. 定义的遍历会在每次循环时,自动接收数组中所遍历到的元素
  4. foreach一般用于遍历容器

五,数组的复制

方式一:

遍历原始数组中的每一个元素,将它们依次复制给新数组中

方式二:

使用System类中的arrayCopy()方法

方式三:

使用Arrays类中的copyOf()方法

数组的地址:

数组是引用数据类型,只要是一个引用数据类型,在创建时就会在堆内存中开辟存储空间,每一个存储空间都有自己的地址。直接打印数组名输出的就是地址值。

当数组的变量被重新赋值后,这个数组就指向了新的地址。

六,二维数组

6.1 概念

概念:二维数组是数组的数组,二维数组中的每一个元素都是一个一维数组

6.2 定义和创建

1.

1
2
数据类型[][] 数组名 = new 数据类型[m][n];
// 表示这个二维数组中有m个一维数组,每一个一维数组中有n个元素

2.

1
2
数据类型[][] 数组名 = new 数据类型[m][];
// 表示这个二维数组中有m个一维数组

注:

  1. 使用这种方式创建的二维数组中的每一个一维数组需要单独创建,否则会发生 NullPointerException空指针异常
  2. 二维数组中的一维数组在创建时不能使用直接赋值的简化形式来创建

3.

1
数据类型[][] 数组名 = {{值1,值2,值3,...},{值1,值2,...},{值1,值2,值3,值4,...},...};

6.3 二维数组的遍历

普通for循环:

1
2
3
4
5
6
7
8
9
10
11
int[][] arr = {
{1,2,3},
{4,5,6},
{7,8,9}
};
for(int i = 0;i <= arr.length - 1;i++){
for(int j = 0;j <= arr[i].length - 1;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}

增强for循环:

1
2
3
4
5
6
7
8
9
10
11
int[][] arr = {
{1,2,3},
{4,5,6},
{7,8,9}
};
for(int[] a : arr){
for(int t : a){
System.out.print(t+"\t");
}
System.out.println();
}