数组详细讲解

105 阅读3分钟

数组的定义

  1. 数组是相同类型数据的有序集合
  2. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
  3. 其中,每个数据称作一个数组元素,每个数据元素通过下标来访问它。

数组声明创建

  1. 首先必须声明数组变量,才能在程序中使用数组。如:
int[] nums ;//首选
int nums[];//效果相同,但不是首选方法
  1. Java通过new 操作符来创建数组。如:
int[] nums = new int[10];
  1. 数组的元素是通过索引来访问的,数组索引从0开始
  2. 获取数组的长度:arrays.length。如:
int[] nums = new int[10];
int k = nums.length;
System.out.println(k);//10;

数组的初始化

  1. 静态初始化
//静态初始化:创建+赋值
        int[] a = {10,20,30,40,50};
        System.out.println(a[0]);//10

2.动态初始化+默认初始化

//动态初始化:包含默认初始化
        //默认初始化: 数值默认为0  字符默认为null

        int[] b = new int[10];
        b[0]=1;
        b[1]=2;
        System.out.println(b[0]);//1
        System.out.println(b[1]);//2
        System.out.println(b[2]);//0

数组的内存分析

  1. Java内存分析
  2. 画图分析 注意:
    • 没有用new创建数组对象时,声明的数组只存放在栈里面
    • 没有给数组赋值的情况下,数组的值会默认初始化:数值为0 字符为null

数组的四个基本特点

  • 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 元素的数据类型是相同的,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  • 数组变量属于引用类型,数组也可以看成是对象,数组中的每一个元素相当于该对象的成员变量。数组本身就是对象,Java对象是在堆中的,数组对象本身是在堆中。

数组边界

  1. 下标的合法边界:[ 0 , arrays.length ];超过会报错
        int[] a = {10,20,30,40,50};

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

运行结果: 重点总结:

  • ArrayIndexOutOfBoundsException:数组下标越界异常
  • 数组是相同数据类型的有序集合
  • 数组也是对象。数组元素相当于对象的成员变量
  • 数组的长度是确定的,不可以改变的,如果越界就会报错。

数组的使用

  1. For-Each循环
package com.wu.array;

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

        int[] nums = {10,20,30,40,50};

        //打印出每一个数组元素
        for (int i = 0; i < nums.length; i++) {
            System.out.println(nums[i]);
        }

        System.out.println("==============");
        //输出数组元素的和
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        System.out.println("sum="+sum);

        System.out.println("=============");
        //输出最大值
        int max = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (nums[i]>max){
                max = nums[i];
            }
        }
        System.out.println("Max="+max);

        System.out.println("==============");
        //增强for循环输出数组的每一个元素   没有下标
        for (int num : nums) {
            System.out.println(num);
        }


    }

}

输出结果: 2. 数组作为方法入参

package com.wu.array;

public class arrayDemo4 {

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6};
        printArrays(nums);
    }

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

}

输出结果:

  1. 数组作为返回值
package com.wu.array;

public class arrayDemo5 {

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5,6};
        int[] re = reverse(nums);
        for (int i = 0; i < re.length; i++) {
            System.out.print(re[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;
    }

}

输出结果:

多维数组

定义:多维数组可以看成是数组的数组,比如说二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。 画图展示:

代码展示:

package com.wu.array;

public class arrayDemo6 {

    public static void main(String[] args) {

        int[][] array = new int[3][2];
        int[][] nums = {{1,2},{3,4},{5,6}};


    }


}

附加,如果你要打印出来这个二维数组:

package com.wu.array;

public class arrayDemo6 {

    public static void main(String[] args) {

        int[][] array = new int[3][2];
        int[][] nums = {{1,2},{3,4},{5,6}};

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


    }

}

输出结果: