Java数组

1、什么是数组

数组的定义

  • 数组是用来存储同一种数据类型的集合,也可以说是容器
  • 数组元素可以通过数组下标访问他们。

数组的四个基本特点

  • 数组的长度是固定的,数组一旦被创建,它的大小就不可以发生改变。
  • 数组中的元素必须是相同类型的,不能与其他类型混在一起。
  • 数组中的元素可以是任何数据类型,可以是基本类型,也可以是引用类型。
  • 数组变量是引用变量,所以数组也可以看成是对象,数组中的每个元素相当于是对象的成员变量。数组本身就是对象,Java中的对象都是在堆中创建的,因此数组无论保存基本类型还是引用类型,数组对象本身都是在堆中。

2、数组的声明和创建【重点】

  • 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
dataType[] arrayName;
  • 创建数组的语法,也叫初始化数组:
dataType[] arrayName = new dataType[arraySize];
  • 数组元素是通过下标访问的,数组下标从 0 开始,到 数组长度-1 结束。
  • 通过 数组名.length 可以获取数组长度:
array.length;
public class ArrayDemo01 {
    // 变量类型 变量名 = 变量的值;
    // 数组类型[] 数组名 = new 数组类型[数组大小];
    public static void main(String[] args) {
        int[] numbers1;  //声明一个数组变量
        numbers1 = new int[10];  //创建一个int类型大小为10的数组
        int[] numbers2 = new int[10]; //初始化大小为10的int数组

        //给数组元素赋值
        numbers1[0] = 1;
        numbers1[1] = 2;
        numbers1[2] = 3;
        numbers1[3] = 4;
        numbers1[4] = 5;
        numbers1[5] = 6;
        numbers1[6] = 7;
        numbers1[7] = 8;
        numbers1[8] = 9;
        numbers1[9] = 10; //不给int数组元素赋值,默认值是0

        //计算所有元素的和
        int sum = 0;
        //获取数组长度:array.length
        for (int i = 0; i < numbers.length; i++) {
            sum += numbers[i];
        }
        System.out.println("总和为:" + sum);
    }
}

3、数组初始化及内存分析【重点】

内存分析

Java内存分析:

内存分析.png

创建数组的堆栈分析.png

数组初始化

1、静态初始化

  • 根据元素数量创建数组大小,是自适应的。
int[] a = {1, 2, 3};
Man[] mans = {new Man(1,1), new Man(2,2)};

2、动态初始化

  • 创建数组的时候指定大小。
  • 数组元素会默认初始化。
int[] a = new int[2];
a[0] = 1;
a[1] = 2;

3、数组的默认(隐式)初始化

数组是引用类型,它的元素相当于类的实例变量,他被分配空间时就已经被隐式初始化。

package com.hongcheng.array;

public class ArrayDemo02 {
    public static void main(String[] args) {
        //静态初始化:创建并赋值给数组
        int[] a = {1, 2, 3, 4, 5};
        System.out.println(a[0]);

        //动态初始化:数组元素默认初始化
        int[] b = new int[10];  //数组元素被隐式初始化
        b[0] = 10;

        System.out.println(b[0]);
        System.out.println(b[1]);   //默认初始化为0
    }
}

4、数组的使用

  • 普通的for循环
  • forEach循环
  • 数组在方法中作参数
  • 数组作为返回值,例如:反转数组。

使用普通的for循环:

public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrays = {1, 2, 3, 4, 5};

        //打印数组的所有元素
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);
        }

        System.out.println("==============");

        //计算所有元素的和
        int sum = 0;

        for (int i = 0; i < arrays.length; i++) {
            sum += arrays[i];
        }
        System.out.println("sum = " + sum);

        System.out.println("==============");

        //找出数组中最大元素
        int max = arrays[0]; //暂时认为数组第一个元素是最大元素

      	//从第二个开始到最后,依次比较,大的代替小的,最后的一定是最大的
        for (int i = 1; i < arrays.length; i++) { 
            if (arrays[i] > max) {
                max = arrays[i];
            }
        }
        System.out.println("max = " + max);
    }
}

使用forEach循环,数组在方法中作参数,数组作为返回值:

public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arrays = {1, 2, 3, 4, 5};

        //遍历数组
        for (int array : arrays) {	
            System.out.println(array);
        }

        int[] reverse = reverse(arrays);
        printArray(reverse);
    }

    //打印数组所有元素的方法
    public static void printArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i] + " ");
        }
    }

    //反转数组
    public static int[] reverse(int[] arrays) {
        int[] result = new int[arrays.length];

        //反转操作
        for (int i = 0, j = result.length - 1; i < arrays.length; i++, j--) {
            result[j] = arrays[i];
        }

        return result;
    }
}

二维数组

  • 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,它的每一个元素都是一个一维数组。

  • 创建二维数组

int[][] a = new int[5][2];

这个二维数组表示五行两列。

二维数组分析.png

多维数组怎么使用?

package com.hongcheng.array;

public class ArrayDemo05 {
    public static void main(String[] args) {

        int[] array1 = {1, 2, 3, 4, 5};  //一维数组
        /*
            [5][2]
            1,2   array[0]
            2,3   array[1]
            3,4   array[2]
            4,5   array[3]
            5,6   array[4]
         */
        int[][] array2 = {{1,2}, {2,3}, {3,4}, {4,5}, {5,6}}; //二维数组,静态初始化方式

//        printArray(array2[0]);
        System.out.println(array2[0][0]); //1
        System.out.println(array2[0][1]); //2

        //获取数组长度
        System.out.println(array1.length);   //一维数组的长度:5
        System.out.println(array2[0].length); //二维数组的长度:2

        //遍历二维数组的所有元素
        for (int i = 0; i < array2.length; i++) {
            for (int j = 0; j < array2[i].length; j++) {
                System.out.println(array2[i][j]);
            }
        }

    }

    //打印数组所有元素的方法
    public static void printArray(int[] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            if (i == arrays.length-1) { //美化格式
                System.out.print(arrays[i]);
            } else { //美化格式
                System.out.print(arrays[i] + ",");
            }
        }
        System.out.println();
    }
}

5、Arrays类

  • 数组的工具类 java.util.Arrays

  • 可以查看JDK文档了解如何使用 Arrays工具类

  • Arrays类中的方法都是 static修饰的静态方法,在使用的时候可以直接使用 类名.方法名 进行调用,而不需要使用 对象.方法名 来调用。

  • 常用方法:

    • 给数组填充值:通过 fill() 方法填充数组。
    • 比较数组元素:通过 equals() 方法比较数组元素的值是否相等。
    • 对数组排序:通过 sort() 方法给数组元素排序,按升序。
    • 查找数组元素:通过 binarySearch() 方法能对有序数组进行二分查找。
    • 打印数组元素:通过 toString() 方法把数组元素按字符串输出。
package com.hongcheng.array;

import java.util.Arrays;

/*
    使用 Arrays工具类的常用方法
 */
public class ArrayDemo06 {
    public static void main(String[] args) {

        int[] a = {1212, 32, 43,1234,5456,23};

        System.out.println(a); //a是一个引用变量,存放数组的内存地址[I@610455d6

        //打印数组元素Arrays.toString()
        System.out.println(Arrays.toString(a)); //[1212, 32, 43, 1234, 5456, 23]

        //对数组元素排序,按升序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a)); //[23, 32, 43, 1212, 1234, 5456]

        //给数组赋值,填充数组
        Arrays.fill(a,0); //数组所有元素填充0
        System.out.println(Arrays.toString(a)); //[0, 0, 0, 0, 0, 0]
        Arrays.fill(a, 1, 3, 1); //从下标1开始填充不包括3,即1,2
        System.out.println(Arrays.toString(a)); //[0, 1, 1, 0, 0, 0]
    }
}

6、数组边界

  • 数组下标的合法区间是:[0, length-1],如果越界就会报错。

  • ArrayIndexOutOfBoundsException:数组下标越界异常!

7、总结

  • 数组是存储同一种数据类型的集合。
  • 数组也是对象,数组元素相当于对象的成员变量。
  • 数组长度是固定的,不可修改的,如果下标越界会报异常。
posted @ 2021-07-30 15:33  siming笨笨  阅读(130)  评论(0)    收藏  举报