java中的数组

java中的数组

  • 一、数组的概述
  • 二、一维数组
  • 三、二维数组
  • 四、Arrays工具类的使用
  • 五、数组中常见的异常

一、数组的概述

1、数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
2、数组的常见概念
① 数组名
②下标(或索引)
③ 元素
④数组的长度
3、 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
4、创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
5、数组的长度一旦确定,就不能修改。
6、 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
7、数组的分类:
①按照维度:一维数组、二维数组、三维数组、…
②按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)

二、一维数组

1、一维数组的声明
①一维数组的声明方式:
type var[] 或 type[] var;
例如:
int a[];
int[] a1;
double b[];
String[] c; //引用类型变量数组
② Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法

2、一维数组的初始化

  • 动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行

1int[] arr = new int[3]; 2arr[0] = 3; 3arr[1] = 9; 4arr[2] = 8; 5 6String names[]; 7names = new String[3]; 8names[0] = “钱学森”; 9names[1] = “邓稼先”; 10names[2] = “袁隆平”; 11 12
  • 静态初始化:在定义数组的同时就为数组元素分配空间并赋值。

1int arr[] = new int[]{ 3, 9, 8}; 23int[] arr = {3,9,8}; 4 5

3、一维数组元素的引用

①定义并用运算符new为之分配空间后,才可以引用数组中的每个元素;
②数组元素的引用方式:数组名[数组元素下标]

  • 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
  • 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 —>n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]

③每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数)

  • 数组一旦初始化,其长度是不可变的

4、一维数组数组元素的默认初始化值

数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。例如:

1public class Test { 2 public static void main(String argv[]){ 3 int a[]= new int[5]; 4 System.out.println(a[3]); //a[3]的默认值为0 5 } 6 } 7 8
  • 对于基本数据类型而言,默认初始化值各有不同
  • 对于引用数据类型而言,默认初始化值为null(注意与0不同!)

在这里插入图片描述
5、一维数组的创建
Java中使用关键字new来创建数组,例如:

1public class Test{ 2 public static void main(String args[]){ 3 int[] s; 4 s = new int[10]; 5 //int[] s=new int[10]; 6 //基本数据类型数组在显式赋值之前, 7 //Java会自动给他们赋默认值。 8 for ( int i=0; i<10; i++ ) { 9 s[i] =2*i+1; 10 System.out.println(s[i]); 11 } 12 } 13} 14 15

6、一维数组的内存解析

在这里插入图片描述

三、二维数组

1、如何理解二维数组?
①数组属于引用数据类型
②数组的元素也可以是引用数据类型
③一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。

2、二维数组的声明与初始化

1int[] arr = new int[]{1,2,3};//一维数组 2//静态初始化 3int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; 4//动态初始化1 5String[][] arr2 = new String[3][2]; 6//动态初始化2 7String[][] arr3 = new String[3][]; 8//也是正确的写法: 9int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}}; 10int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断 11 12

3、如何调用二维数组元素?

1System.out.println(arr1[0][1]);//2 2System.out.println(arr2[1][1]);//null 3 4arr3[1] = new String[4]; 5System.out.println(arr3[1][0]); 6System.out.println(arr3[0]); 7 8

4、二维数组的属性:

1System.out.println(arr4.length);//3 2System.out.println(arr4[0].length);//3 3System.out.println(arr4[1].length);//4 4 5

5、遍历二维数组元素

1 for(int i = 0;i < arr4.length;i++){ 2 for(int j = 0;j < arr4[i].length;j++){ 3 System.out.print(arr4[i][j] + " "); 4 } 5 System.out.println(); 6 } 7 8

6、二维数组元素的默认初始化值

规定:二维数组分为外层数组的元素,内层数组的元素

1 int[][] arr = new int[4][3]; 2 3
1 外层元素:arr[0],arr[1]2 3
1 内层元素:arr[0][0],arr[1][2]2 3

针对于初始化方式一:比如:int[][] arr = new int[4][3];

1 外层元素的初始化值为:地址值 2 3
1 内层元素的初始化值为:与一维数组初始化情况相同 2 3

针对于初始化方式二:比如:int[][] arr = new int[4][];

1 外层元素的初始化值为:null 2 3
1 内层元素的初始化值为:不能调用,否则报错。 2 3

7、二维数组的内存解析
在这里插入图片描述

四、Arrays工具类的使用

1.理解:
① 定义在java.util包下。
② Arrays:提供了很多操作数组的方法。

2.使用:

1 //1.boolean equals(int[] a,int[] b):判断两个数组是否相等。 2 int[] arr1 = new int[]{1,2,3,4}; 3 int[] arr2 = new int[]{1,3,2,4}; 4 boolean isEquals = Arrays.equals(arr1, arr2); 5 System.out.println(isEquals); 6 7 //2.String toString(int[] a):输出数组信息。 8 System.out.println(Arrays.toString(arr1)); 9 10 //3.void fill(int[] a,int val):将指定值填充到数组之中。 11 Arrays.fill(arr1,10); 12 System.out.println(Arrays.toString(arr1)); 13 14 //4.void sort(int[] a):对数组进行排序。 15 Arrays.sort(arr2); 16 System.out.println(Arrays.toString(arr2)); 17 18 //5.int binarySearch(int[] a,int key) 19 int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333}; 20 int index = Arrays.binarySearch(arr3, 210); 21 if(index >= 0){ 22 System.out.println(index); 23 }else{ 24 System.out.println("未找到"); 25 } 26 27

五、数组中常见的异常

1.数组角标越界异常:ArrayIndexOutOfBoundsException

1 int[] arr = new int[]{1,2,3,4,5}; 2 3 for(int i = 0;i <= arr.length;i++){ 4 System.out.println(arr[i]); 5 } 6 System.out.println(arr[-2]);//报异常,后面的语句不会执行 7 System.out.println("hello"); 8 9

2.空指针异常:NullPointerException

1 //情况一: 2 int[] arr1 = new int[]{1,2,3}; 3 arr1 = null; 4 System.out.println(arr1[0]); 5 6 //情况二: 7 int[][] arr2 = new int[4][]; 8 System.out.println(arr2[0][0]); 9 10 //情况三: 11 String[] arr3 = new String[]{"AA","BB","CC"}; 12 arr3[0] = null; 13 System.out.println(arr3[0].toString()); 14 15 16

一旦程序出现异常,未处理时,就终止执行。

代码交流 2021