java基础之 数组

什么是数组

数组是用来存储固定大小的同类型元素。

数组怎么写

格式:数据类型[] 数组变量名 = new 数据类型[数组长度];

栗子1:定义一个存放4个年龄的数组
int[] ages = new int[4];

栗子2:定义一个存放6个金额的数组
double[] prices = new double[6];

数组存值

数组变量名[数据的位置] = 值;

注意:在java中,数组的位置是从0开始的

ages[0] = 15;
ages[1] = 18;
ages[2] = 45;
ages[3] = 23;
System.out.println(Arrays.toString(ages));

//输出
[15, 18, 45, 23]

根据上面存储的数据,在java数组中的位置和数据对应的位置

0  1  2  3
15 18 45 23

数组的取值

数组变量名[数据的位置]

根据上面说明的位置,如果我们需要读取45这个数据,我们应该使用 ages[2];

System.out.println(ages[2]);
// 控制台输出 45

如果我们读取了不存在的位置,程序就会报错;

例如ages的位置只有0~3,如果我们输入ages[4],程序就会抛出 java.lang.ArrayIndexOutOfBoundsException 异常;

 System.out.println(ages[4]);

// 程序抛出异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
	at test.ArrayTest.main(ArrayTest.java:42)

数组有什么用

我们在需要存放同类型的很多数据时,我们可以定义很多个变量,把这些值存起来。这样会使我们定义大量的变量,使得程序变得异常复杂而且不便于我们使用这个数组。这时我们就可以使用数组,把这些数据存在数组中。

例如:我们存储4个年龄

不用数组:

int age1 = 15;
int age2 = 18;
int age3 = 45;
int age4 = 23;

使用数组:

int[] ages = new int[4];
ages[0] = 15;
ages[1] = 18;
ages[2] = 45;
ages[3] = 23;

使用数组后,我们只要调用 ages 就可以操作这些数据,不用像第一个一样,只能根据每一个变量的名字去操作数据。

数组的长度

如果我们得到的数组是一个变量,我们需要知道数组的长度,防止我们读取到不存在的位置,这时我们可以使用 数组变量名.length 去获取到数组的长度。

System.out.println(ages.length);
// 输出 4

数据的静态初始化

数据类型[] 数组变量名 = {变量1,变量2,...变量n};

静态初始化的数据和普通方式设置的数据的使用方法是相同的。

栗子:我们修改ages为静态初始化方式

int[] ages = {15, 18, 45, 23};

数组的特点

  • 数组的长度在创建时就固定了,不可进行修改。
  • 数组存储的数据类型只能是同一种类型的,不允许出现混合类型。
  • 数组的类型可以是任何类型,基本类型、引用类型都可以。
  • 数组的变量是引用类型,它是存放在堆中的。

数据的循环

我们可以根据数组的下标(位置)来读取数组的元素。

如果我们需要读取全部的元素,这时我们就可以使用for循环来读取;

for (int i = 0; i < ages.length; i++) {
    System.out.print(ages[i] + " ");
}
System.out.println();
// 输出:15 18 45 23

jdk1.5+ 可以使用增强for循环来循环数组;

for (int age : ages) {
    System.out.print(age + " ");
}
System.out.println();
// 输出:15 18 45 23

多维数组

数组中可以存储基础类型的数据和引用类型的数据,而数组本身又是一个引用类型的数据,

所有我们可以把数组当做数据存到另外一个数组中,像这样的多层的存储数据,我们称之为多维数组,

数组有几层就称之为几维数组。

例如:我们定义5年龄数组,分别存放不同的年龄数据。

int[] ages1 = {10, 11, 12, 13, 14};
int[] ages2 = {20, 21, 22, 23, 24};
int[] ages3 = {30, 31, 32, 33, 34};
int[] ages4 = {40, 41, 42, 43, 44};

然后我们把这些数据放在一个名字叫 agess 的数组中。

数据的类型[] 表示的是数组,如果 数据的类型=int[],那就变成int[][]了

int[][] agess = {ages1, ages2, ages3, ages4};
System.out.println(Arrays.deepToString(agess));
// 输出 
[[10, 11, 12, 13, 14], [20, 21, 22, 23, 24], [30, 31, 32, 33, 34], [40, 41, 42, 43, 44]]

上面的写法我们可以把定义变量的操作去掉,直接在使用的地方替换为具体的值就变成下列的形式。

int[][] agess2 = {
    {10, 11, 12, 13, 14},
    {20, 21, 22, 23, 24},
    {30, 31, 32, 33, 34},
    {40, 41, 42, 43, 44}
};
System.out.println(Arrays.deepToString(agess2));
// 输出 
[[10, 11, 12, 13, 14], [20, 21, 22, 23, 24], [30, 31, 32, 33, 34], [40, 41, 42, 43, 44]]

附录:测试代码

package test;

import java.util.Arrays;

/**
 * 数组测试
 *
 * @author lixin
 */
public class ArrayTest {

    public static void main(String[] args) {
        // 一、数组的定义
        // 格式:数据类型[] 数组变量名 = new 数据类型[数组长度];

        // 栗子1:定义一个存放4个年龄的数组
        int[] ages = new int[4];

        // 栗子2:定义一个存放6个金额的数组
        double[] prices = new double[6];

        // 二、数组的赋值
        // 数组变量名[数据的位置] = 值;
        // 注意:在java中,数组的位置是从0开始的
        ages[0] = 15;
        ages[1] = 18;
        ages[2] = 45;
        ages[3] = 23;
        System.out.println(Arrays.toString(ages));

        // 数组的位置和数据对应的位置
        // 0  1  2  3
        // 15 18 45 23

        // 三、数组的取值
        // 根据上面说明的位置,如果我们需要读取45这个数据,我们应该使用 ages[2]
        // 控制台就会输出 45
        System.out.println(ages[2]);

        // 如果我们读取了不存在的位置,程序就会报错
        // 例如ages的位置只有0~3,如果我们输入ages[4],程序就会抛出 java.lang.ArrayIndexOutOfBoundsException 异常
        //System.out.println(ages[4]);

        // 四、数组的长度
        // 如果我们得到的数组是一个变量,我们需要知道数组的长度,防止我们读取到不存在的位置,这时我们可以使用
        // 数组变量名.length 这个属性去获取到数组的长度
        // 例如下列就输出 4
        System.out.println(ages.length);

        // 五、数组的循环
        // 我们可以根据数组的下标(位置)来读取数组的元素,
        // 如果我们需要读取全部的元素,这时我们就可以使用for循环来读取
        for (int i = 0; i < ages.length; i++) {
            System.out.print(ages[i] + " ");
        }
        System.out.println();
        // 输出:15 18 45 23

        // 在jdk1.5+ 可以使用增强for循环来循环数组
        for (int age : ages) {
            System.out.print(age + " ");
        }
        System.out.println();
        // 输出:15 18 45 23

        // 实例1:计算数组的和
        System.out.println("数组的和=" + sum(ages));

        // 实例2:查找最大的元素
        System.out.println("查找最大的元素=" + max(ages));

        // 实例3:反转数组
        int[] reverse = reverse(ages);
        for (int age : reverse) {
            System.out.print(age + " ");
        }
        System.out.println();
        // 输出:23 45 18 15

        // 多维数组
        // 数组中可以存储基础类型的数据和引用类型的数据,而数组本身又是一个引用类型的数据,
        // 所有我们可以把数组当做数据存到另外一个数组中,像这样的多层的存储数据,
        // 我们称之为多维数组,数组有几层就称之为几维数组。
        // 例如:我们定义5年龄数组,分别存放不同的年龄数据
        int[] ages1 = {10, 11, 12, 13, 14};
        int[] ages2 = {20, 21, 22, 23, 24};
        int[] ages3 = {30, 31, 32, 33, 34};
        int[] ages4 = {40, 41, 42, 43, 44};

        // 然后我们把这些数据放在一个名字叫 agess 的数组中
        // 数据的类型[] 表示的是数组,如果 数据的类型=int[],那就变成int[][]了
        int[][] agess = {ages1, ages2, ages3, ages4};
        System.out.println(Arrays.deepToString(agess));

        // 上面的写法我们可以把定义变量的操作去掉,直接在使用的地方替换为具体的值就变成下列的形式
        int[][] agess2 = {
                {10, 11, 12, 13, 14},
                {20, 21, 22, 23, 24},
                {30, 31, 32, 33, 34},
                {40, 41, 42, 43, 44}
        };
        System.out.println(Arrays.deepToString(agess2));

    }

    /**
     * 计算数组的和
     *
     * @param ages 数组
     * @return 数组的和
     */
    public static int sum(int[] ages) {
        int sum = 0;
        for (int i = 0; i < ages.length; i++) {
            sum += ages[i];
        }
        return sum;
    }

    /**
     * 查找最大的元素
     *
     * @param ages 数组
     * @return 数组中最大的元素
     */
    public static int max(int[] ages) {
        int max = ages[0];
        for (int age : ages) {
            if (age > max) {
                max = age;
            }
        }
        return max;
    }

    /**
     * 反转数组
     *
     * @param ages 需要被反转的数组
     * @return 反转都的数组
     */
    public static int[] reverse(int[] ages) {
        int[] result = new int[ages.length];
        for (int i = 0; i < result.length; i++) {
            result[i] = ages[(ages.length - 1) - i];
        }
        return result;
    }
}
posted @ 2021-05-26 15:26  喵喵扑  阅读(146)  评论(0编辑  收藏  举报