Java中的数组从运行机制上是没有多维的,但是Java中支持多维结构的语法,下面我们就来谈一下Java中的一维数组和多维数组
一.一维数组
1.数组的理解
数组(Array),是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理。
2.数组的初始化
一维数组的初始化分为静态初始化和动态初始化,静态初始化是在定义数组的同时给出数组元素的值,而动态初始化只是制定了数组的长度没有去给定数组的值,当然在数组中,初始化的时候,不能既给定了数组的长度,又给数组赋值。在数组声明之后,他的长度是不可以改变的,一旦引用超过长度就会报错
int [] array1 = new int [] {2,3,5,7,11,13,17,19,};//此代码为静态初始化
int [] array2 = new int [5];/此代码为动态初始化
3.一维数组的使用
数组最常用的方法是访问数组的元素,包括对数组的使用和赋值,访问数组是一般在数组变量名后加一个[],[]中就是数组的索引,Java中数组的索引是从0开始的,最后一个元素的其长度减1
int [] ar = new int [5];
ar[2] =0;//这就是对一维数组的赋值操作
4.如何访问数组的长度
在Java中访问数组的长度需要访问数组的length属性,通过这个属性可以获得数组的长度,一旦获得数组的长度就可以遍历数组
int[] arr1 = new int [] {12,34,55,34,56};
int weight = arr1.length;//获取了数组的长度
5.遍历数组
在Java中可以使用上述的length属性来遍历数组,主要方法如下
int [] arr4 = new int[]{1,23,44,55,66,23,12,};
//遍历数组
for (int i = 0 ;i < arr4.length; i++){
System.out.println(arr4[i]);
}
6.数组的初始化值
在数组中的初始化值和它定义的类型相关连,short,byte,int,long类型的初始化值为0;double,float型的初始化值为0.0;boolean 类型的初始化值为false;char型的初始化值为 0 ;引用类型的初始化值为null
7.数组在内存中的结构
二. 二维数组
1.二维数组的初始化及其定义
二维数组和一维数组一样分为静态初始化和动态初始化
int[][] arr =new int [][]{{1,23,4},{12,33,44,5},{}12,34,5,66,};//这是静态初始化
int [][] arr1 = new int [3][4];//这是动态初始化
int[][] arr3 = new int [3][];//也可以只定义行数,
2.二维数组实质上是一维数组,他只不过是将数组元素引用了一个一维数组,当然二维数组的调用使用两个[]来实现,第一个[] 表示的是数组的索引,第二个[]表示的是引用那个一维数组的索引。
int [][] arr1 = new int [][] {{12,23,23,4,5},{123,5,89,}};
System.out.println(arr1 [0][1]);//这个输出的是23
3,获取数组的长度
int [] [] arr1= new int [3][4];
System.out.println(arr1.length);//输出的是3
System.out.println(arr1[0].length);//输出的是4
以上代码中第一个输出的是3,因为arr管理的是一个3个长度的数组,而第二个输出的是4,因为每一个数组元素又管理的是一个4个元素的一维数组;
4,遍历一个二维数组
遍历二维数组用两个for循环来实现
int [][] arr = new int [3][4];
for (int i = 0; i< arr.length; i++){//
for (int j = 0; j < arr[i].length;j++){
System.out.println(arr[i][j]);
}
}
5.二维数组的初始化值
外层:初始化值为地址值;
内层:初始化值为定义的类型
int [][] arr1 = new int [12][3];
System.out.println(arr1[1])://输出的是地址值
System.out.println(arr [1]][2]);//输出的是0
三. Arrays类工具
1.boolean equals(int[] a,int[] b) 判断两个数组是否相等。
// * 1 boolean equals(int[] a,int[] b) 判断两个数组是否相等。
int[] arrs1 = new int [] { 1,2,4,3};
int [] arrs2 = new int [] {1,2,2,3};
System.out.println(Arrays.equals(arrs1,arrs2));
2 String toString(int[] a) 输出数组信息。
// 2 String toString(int[] a) 输出数组信息。
System.out.println(Arrays.toString(arrs1));
3 void fill(int[] a,int val) 将指定值填充到数组之中。
// 3 void fill(int[] a,int val) 将指定值填充到数组之中。
Arrays.fill(arrs1,11);
System.out.println(Arrays.toString(arrs1));
4 void sort(int[] a) 对数组进行排序。
// 4 void sort(int[] a) 对数组进行排序。
int [] numbers = new int[] {-12,-11,-5,0,4,6,65,78,};
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));
5 int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值
// 5 int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值。
int [] numbers1 = new int[] {-12,-11,-5,0,4,6,65,78,};
int number = -12;
int check = Arrays.binarySearch(numbers1, number);
if (check >= 0) {
System.out.println("找到了并且在" + check + "位置");
}else
{
System.out.println("what's a pity!!");
}
四. 数组中常见的异常
1.数组角标越界异常(ArrayoutBoundsException)
在使用或者赋值的过程中,超过了数组的长度
int [] arr = new int [2];
System.out.println(arr [4]);//报数组下标越界
2.空指针的异常(ArrayPointerException)
//方法一
int[] arr = new int [2];
arr = null;
System.out.println(arr[1]); //报错空指针异常
//方法二
int [][] arr1 = new int [12][];
System.out.println(arr1[2][2]);//报错空指针异常
String [] arr3 = new String [3];
arr3 [1]= null;
System.out.println(arr3[1].toString());//报错空指针异常