Java不规则数组
多維數(shù)組被解釋為是數(shù)組的數(shù)組,所以因此會(huì)衍生出一種不規(guī)則數(shù)組。
規(guī)則的 4×3 二維數(shù)組有 12 個(gè)元素,而不規(guī)則數(shù)組就不一定了。如下代碼靜態(tài)初始化了一個(gè)不規(guī)則數(shù)組。
int intArray[][] = {{1,2}, {11}, {21,22,23}, {31,32,33}};**高維數(shù)組(二維以及二維以上的數(shù)組稱(chēng)為高維數(shù)組)**是 4 個(gè)元素,但是低維數(shù)組元素個(gè)數(shù)不同,如圖 1 所示,其中第 1 個(gè)數(shù)組有兩個(gè)元素,第 2 個(gè)數(shù)組有 1 個(gè)元素,第 3 個(gè)數(shù)組有 3 個(gè)元素,第 4 個(gè)數(shù)組有 3 個(gè)元素。這就是不規(guī)則數(shù)組。
不規(guī)則數(shù)組
動(dòng)態(tài)初始化不規(guī)則數(shù)組比較麻煩,不能使用 new int[4][3] 語(yǔ)句,而是先初始化高維數(shù)組,然后再分別逐個(gè)初始化低維數(shù)組。代碼如下:
int intArray[][] = new int[4][]; //先初始化高維數(shù)組為4 // 逐一初始化低維數(shù)組 intArray[0] = new int[2]; intArray[1] = new int[1]; intArray[2] = new int[3]; intArray[3] = new int[3];上述代碼初始化數(shù)組完成之后,不是有 12 個(gè)元素而是 9 個(gè)元素,它們的下標(biāo)索引如下圖所示,可見(jiàn)其中下標(biāo) [0][2]、[1][1] 和 [1][2] 是不存在的,如果試圖訪問(wèn)它們則會(huì)拋出下標(biāo)越界異常。
不規(guī)則數(shù)組訪問(wèn)
注意:**下標(biāo)越界異常(ArrayIndexOutOfBoundsException)是試圖訪問(wèn)不存在的下標(biāo)時(shí)引發(fā)的。**例如一個(gè)一維 array 數(shù)組如果有 10 個(gè)元素,那么表達(dá)式 array[10] 就會(huì)發(fā)生下標(biāo)越界異常,這是因?yàn)閿?shù)組下標(biāo)是從 0 開(kāi)始的,最后一個(gè)元素下標(biāo)是數(shù)組長(zhǎng)度減 1,所以 array[10] 訪問(wèn)的元素是不存在的。
不規(guī)則數(shù)組的示例:
import java.util.Arrays;public class HelloWorld {public static void main(String[] args) {int intArray[][] = new int[4][]; // 先初始化高維數(shù)組為4// 逐一初始化低維數(shù)組intArray[0] = new int[2];intArray[1] = new int[1];intArray[2] = new int[3];intArray[3] = new int[3];// for循環(huán)遍歷for (int i = 0; i < intArray.length; i++) {for (int j = 0; j < intArray[i].length; j++) {intArray[i][j] = i + j;}}// for-each循環(huán)遍歷for (int[] row : intArray) {for (int column : row) {System.out.print(column);// 在元素之間添加制表符,System.out.print('\t');}// 一行元素打印完成后換行System.out.println();}System.out.println(intArray[0][2]); // 發(fā)生運(yùn)行期錯(cuò)誤} }不規(guī)則數(shù)組訪問(wèn)和遍歷可以使用 for 和 for-each 循環(huán),但要注意下標(biāo)越界異常發(fā)生。
上述代碼第 18 行和第 19 行采用 for-each 循環(huán)遍歷不規(guī)則數(shù)組,其中代碼第 18 行 for-each 循環(huán)取出的數(shù)據(jù)是 int 數(shù)組,所以 row 類(lèi)型是 int[]。代碼第 19 行 for-each 循環(huán)取出的數(shù)據(jù)是 int 數(shù)據(jù),所以 column 的類(lèi)型 int。另外,注意代碼第 27 行試圖訪問(wèn) intArray[0][2]元素,由于 [0][2] 不存在所以會(huì)發(fā)生下標(biāo)越界異常。
總結(jié)
- 上一篇: Spring Boot 动态修改定时任务
- 下一篇: Java 链表数据修改