Java-数组

267 阅读4分钟

数组描述

数组是一种用于存储固定数量元素的容器。数组中的每个元素可以是同一类型的任何数据类型,例如整数、浮点数、字符、对象等。

数组特点

  • 数组中的元素是按照索引的顺序排列的,可以使用索引来访问和修改数组元素
  • 数组的长度是固定的,一旦创建后就无法改变。因此,在创建数组时需要指定数组的长度
  • 数组只能存储同一类型的数据,不能混合不同类型的数据
  • 数组属于引用类型变量,本质是对象参考 文档

数组的声明

声明数组:数组的类型+数组变量的名称(简称数组名)

声明一维数组
  • 数组的元素类型 数组名[];

    float numbers[];
    
  • 数组的元素类型[] 数组名 推荐

    float[] numbers;
    
声明多维数组
  • 数组的元素类型 数组名[];

    float numbers[][];
    
  • 数组的元素类型[] 数组名 推荐

    float[][] numbers;
    
  • 数组的元素类型[] 数组名[];

    float[] numbers[];
    
分配变量

声明数组后,必须采用new关键字进行内存空间分配

数组名 = new 数组元素的类型[数组元素的个数]

//一维数组声明和分配
int[] numbers;
numbers = new int[10];
​
//二维数组声明和分配
int[][] numbers;
numbers = new int[3][10];

动态初始化 type[] arrayName = new type[number];

//动态初始化一维数组声明和分配
int[] numbers = new int[4];
​
//动态初始化二纬数组声明和分配
int[][] numbers = new int[2][3];

静态初始化

  • type[] arrayName = {value, value...} 推荐
//静态初始化一维数组声明和分配
String[] names = {"smile","dylan"};
​
//静态初始化二维数组声明和分配
String[][] names = {{"smile"},{"smile"}};
  • type[] arrayName= new type[]{value, value}
//静态初始化一维数组声明和分配
String[] names = new String[]{"smile","dylan"};
​
//静态初始化二维数组声明和分配
String[][] names = new String[][]{{"smile"},{"smile"}};

栈空间数组变量存储的地址指向堆空间数组中第一个元素的地址

一维数组内存分析图:

image-20220330150307924

二维数组内存分析图

image-20220330191253935

数组的初始化

创建数组后,系统会给数组中每一个元素一个默认值

int->0,short->0,byte->0,long->0,float->0.0,double->0.0,char->\u000,boolean->false,Object->null
使用数组

数组通过索引访问自己的元素。数组的第一个元素是从下标0开始

//一维数组使用
int[] numbers = {1,2,3};
​
int myNumber = numers[0];
​
//二维数组使用
int[][] numbers = {{1,2,3},{4,5,6}};
​
int myNumber = numbers[0][0];

数组中的元素的个数称为数组的长度。通过属性值length获取到数组的长度

//一维数组使用
int[] numbers = {1,2,3};
System.out.println(numbers.length);
​
//一维数组使用
int[][] numbers = {{1,2,3},{1,2,3}};
System.out.println(numbers.length);

分别输出结果为:3 2

数组的引用

数组属于引用类型变量,因此两个相同类型的数组如果具有相同引用,它们就有完全相同的元素

int[] numbers1 = {1,2,3};
int[] numbers2 = numbers1;
​
numbers2[0] = 0;
​
System.out.println(numbers1[0]);

采用静态声明的方式,声明一个int[]变量numbers1,将number1的值,赋值给numbers2,修改numbers2的值,我们发现numbers1的值也发生了变化。

将数组赋值给另外一个变量的时候,必须保证两个变量的数据类型保持一致

image-20220330192532018

数组的遍历
  • 普通for循环

    for(int i =0; i < array.lenth;i++) {
      //采用下标进行数组的访问
      System.out.println(array[i]);
    }
    
  • 特殊for循环

    for(int value : array) {
      System.out.println(value);
    }
    //value 的类型,必须和数组中声明的类型保持一致
    

当数组的下标超出数组的最大下标(array.length-1),会抛出常

java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
多维数组(二维数组)

二维数组实际上是由多个一维数组组成,它的各个一维数组的长度可以相同,也可以不同

int[][] numbers = new int[2][];
​
for(int i = 0; i< numbers.length; i++) {
  numbers[i] = new int[i+1];
}
​
//输出的结果为 1 2
for(int[] array : numbers) {
  System.out.println(array.length);
}

杨辉三角使用

public int[][] Yanghui(int number) {
  int[][] numbers = new int[number][];
​
  for (int i = 0; i < numbers.length; i++) {
    numbers[i] = new int[i+1];
​
    for (int j = 0; j < i+1; j++) {
      if (j == 0 || j == i) {
        numbers[i][j] = 1;
      } else {
        numbers[i][j] = numbers[i-1][j-1] + numbers[i-1][j];
      }
    }
  }
​
  return numbers;
}
数组常用的方法