Java中二維數(shù)組的正確使用方法介紹
一. 多維數(shù)組
1. 概念
多維數(shù)組可以看成是數(shù)組的數(shù)組。 比如二維數(shù)組就是一個特殊的一維數(shù)組,它的每個元素都是一個一維數(shù)組。其他多維數(shù)組的概念,大家可以參照二維數(shù)組以此類推。
2. 分類
多維數(shù)組可以分為:
- 二維數(shù)組;
- 三維數(shù)組;
- 其他數(shù)組;
其實我們在開發(fā)時,真正常用的數(shù)組也就是一維數(shù)組和二維數(shù)組,更多維度的數(shù)組很少使用。所以接下來在本篇文章中,主要是給大家講解二維數(shù)組相關(guān)的內(nèi)容。
二. 二維數(shù)組
1. 概念
二維數(shù)組就是一種數(shù)組的數(shù)組,其本質(zhì)上還是一個一維數(shù)組,只是它的數(shù)據(jù)元素又是一個一維數(shù)組。 如果你對這個概念想象不出來,給大家舉個栗子,相信吸煙的同學(xué)一下子就會明白。
一根煙 = 一個變量
一包煙 = 20根煙 = 一維數(shù)組
一條煙 = 10包煙 = 二維數(shù)組
也就是說,我們買的”一條煙“,就是一種”二維數(shù)組“,明白了吧?
2. 定義
定義二維數(shù)組的基本語法如下:
定義方式一:
元素類型[][] 數(shù)組名稱;
定義方式二:
元素類型 數(shù)組名稱[][];
在開發(fā)時,第一種定義方式更常用一些。這是數(shù)組的定義,我們還要對數(shù)組進(jìn)行初始化。二維數(shù)組在初始化時,也分為動態(tài)初始化和靜態(tài)初始化兩種情況。我們可以把數(shù)組的定義和初始化在多條語句中分開完成,也可以直接放在一個語句中完成。
3. 初始化
3.1 動態(tài)初始化
二維數(shù)組進(jìn)行動態(tài)初始化時,語法格式如下:
元素類型[][] 數(shù)組名稱 = new 元素類型[二維數(shù)組的長度][一維數(shù)組的長度];
例如:
int[][] arr = new int[3][4];
在上述示例中,表示我們定義了一個整型的二維數(shù)組arr。3表示在二維數(shù)組中有3個一維數(shù)組,每個一維數(shù)組就是一行;4表示每個一維數(shù)組中有4個數(shù)據(jù)元素,這樣就形成了二維數(shù)組的4列。 這樣我們就可以把這個二維數(shù)組arr看成是一個3行4列的數(shù)組或矩陣, 訪問二維數(shù)組中的某個元素時,需要使用arr[row][col]的形式。所以二維數(shù)組中,總的元素個數(shù)最多有3*4=12個。
以下是動態(tài)初始化的案例代碼。
/** * @author */ public class Demo15 { public static void main(String[] args) { // 二維數(shù)組--動態(tài)初始化 //二維數(shù)組在動態(tài)初始化時,必須指定二維數(shù)組的長度。 //創(chuàng)建一個包含了3個一維數(shù)組的二維數(shù)組,每個一維數(shù)組的長度是2。 int[][] arr2 = new int[3][2]; //給二維數(shù)組賦值 //給二維數(shù)組中的第一個一維數(shù)組賦值 arr2[0][0] = 111; arr2[0][1] = 222; //給二維數(shù)組中的第二個一維數(shù)組賦值 arr2[1][0] = 333; arr2[1][1] = 444; //給二維數(shù)組中的第三個一維數(shù)組賦值 arr2[2][0] = 555; arr2[2][1] = 666; //二維數(shù)組取值 System.out.println( "二維數(shù)組中第一個元素里的第一個元素"+arr2[0][0]); System.out.println( "二維數(shù)組中第一個元素里的第二個元素"+arr2[0][1]); System.out.println( "二維數(shù)組中第二個元素里的第一個元素"+arr2[1][0]); System.out.println( "二維數(shù)組中第二個元素里的第二個元素"+arr2[1][1]); //獲取二維數(shù)組的長度 System.out.println("二維數(shù)組的長度"+arr2.length); System.out.println("二維數(shù)組中第一個一維數(shù)組的長度"+arr2[0].length); System.out.println("二維數(shù)組中第二個一維數(shù)組的長度"+arr2[1].length); System.out.println("二維數(shù)組中第三個一維數(shù)組的長度"+arr2[2].length); } }
注意:我們在對二維數(shù)組進(jìn)行動態(tài)初始化時,必須先指定出二維數(shù)組的長度,但一維數(shù)組的長度可以后續(xù)使用前再單獨指定。
3.2 靜態(tài)初始化
二維數(shù)組中,每個一維數(shù)組的長度并不要求相同,可以各不相同。 二維數(shù)組進(jìn)行靜態(tài)初始化時,語法格式如下:
元素類型[][] 數(shù)組名稱 = new 元素類型[][]{{一維數(shù)組1,一維數(shù)組2,一維數(shù)組3....};
例如:
int[][] arr = new int[][]{{2,3},{5,2,1},{10,45,22,54}};
但是這種方式的語法顯得有些啰嗦,所以在實際開發(fā)時,我們一般是采用簡化的靜態(tài)初始化方式,如下所示:
元素類型[][] 數(shù)組名稱 =m{{一維數(shù)組1,一維數(shù)組2,一維數(shù)組3....};
例如:
int[][] arr = {{2,3},{5,2,1},{10,45,22,54}};
以下是靜態(tài)初始化的案例代碼。
/** * @author */ public class Demo16 { public static void main(String[] args) { // 二維數(shù)組--靜態(tài)初始化 //靜態(tài)初始化一個二維數(shù)組。靜態(tài)初始化時可以很靈活 int[][] arr = {{11,22,33},{66,88}}; //給二維數(shù)組賦值。 //重新給二維數(shù)組中第一個一維數(shù)組里的第3個數(shù)據(jù)元素(即33)賦值,用99替換原來的33. arr[0][2] = 99; //重新給二維數(shù)組中第二個一維數(shù)組里的第1個數(shù)據(jù)元素(即66)賦值,用77替換原來的66. arr[1][0] = 77; //二維數(shù)組取值 System.out.println( "二維數(shù)組中第一個一維數(shù)組里的第一個元素"+arr[0][0]); System.out.println( "二維數(shù)組中第一個一維數(shù)組里的第二個元素"+arr[0][1]); System.out.println( "二維數(shù)組中第二個一維數(shù)組里的第三個元素"+arr[0][2]); System.out.println( "二維數(shù)組中第二個一維數(shù)組里的第一個元素"+arr[1][0]); System.out.println( "二維數(shù)組中第二個一維數(shù)組里的第二個元素"+arr[1][1]); //獲取二維數(shù)組的長度 System.out.println("二維數(shù)組中的長度"+arr.length); System.out.println("二維數(shù)組中第一個一維數(shù)組的長度"+arr[0].length); System.out.println("二維數(shù)組中第二個一維數(shù)組的長度"+arr[1].length); } }
以上是定義和初始化二維數(shù)組的基本案例,為了加深大家對二維數(shù)組的理解,接下來再設(shè)計幾個代碼案例,鞏固二維數(shù)組的用法。
4. 擴(kuò)展案例
4.1 動態(tài)初始化的變形寫法
如果我們在定義二維數(shù)組時,沒有給定一維數(shù)組的長度,那么在使用數(shù)組之前,一定要先對一維數(shù)組進(jìn)行初始化。 否則,此時如果直接使用一維數(shù)組,就會產(chǎn)生空指針異常java.lang.NullPointerException。
/** * @author */ public class Demo17 { public static void main(String[] args) { //動態(tài)初始化時未限定一維數(shù)組的長度 int[][] arr = new int[3][]; //如果我們在定義二維數(shù)組時,沒有給定一維數(shù)組的長度,那么在使用數(shù)組之前,一定要初始化里面的一維數(shù)組。 //否則,如果直接使用一維數(shù)組,就會產(chǎn)生空指針異常java.lang.NullPointerException // arr3[0][0] = 100; //初始化一維數(shù)組 arr[0] = new int[2]; arr[1] = new int[1]; arr[2] = new int[4]; //給數(shù)組賦值 arr[0][0] = 1; arr[0][1] = 2; arr[1][0] = 10; arr[2][0] = 100; arr[2][1] = 200; arr[2][2] = 300; arr[2][3] = 400; // 二維數(shù)組取值 System.out.println("二維數(shù)組中的第一個元素中的第一個元素" + arr[0][0]); System.out.println("二維數(shù)組中的第一個元素中的第二個元素" + arr[0][1]); System.out.println("二維數(shù)組中的第二個元素中的第一個元素" + arr[1][0]); } }
arr[0]=new int[2] 和 arr [1]=new int[1]
是在為最高維分配引用空間,也就是限制了最高維能保存數(shù)據(jù)的最大長度。
4.2 遍歷二維數(shù)組
因為二維數(shù)組中包含若干個一維數(shù)組,我們之前遍歷一維數(shù)組時要使用一個循環(huán),所以我們對二維數(shù)組進(jìn)行遍歷時就要使用嵌套的雙重循環(huán)。當(dāng)然,for/while/foreach等循環(huán)都可以使用。
/** * @author 一一哥Sun */ public class Demo18 { public static void main(String[] args) { // 二維數(shù)組--遍歷 //定義一個二維數(shù)組 int[][] arr = {{11,22,33},{55,66},{77,88,99}}; //使用雙重for循環(huán),遍歷二維數(shù)組 //第一層循環(huán):遍歷二維數(shù)組中有幾個一維數(shù)組 for (int i = 0; i < arr.length; i++) { //arr[i]是一維數(shù)組 //第二層循環(huán):遍歷每個一維數(shù)組 for(int j = 0 ; j < arr[i].length ; j++) { System.out.println("二維數(shù)組中第"+(i+1)+"個一維數(shù)組里的元素"+arr[i][j]); } } } }
5. 內(nèi)存分析
對于一個二維數(shù)組來說,比如int[][] array={{10,0,0,20,0},{0,30,40,0,0},{0,0,0,0,0}};
這個二維數(shù)組的結(jié)構(gòu)如下圖所示:
array[0]會獲取array數(shù)組的第1個元素,因為array數(shù)組的每個元素都是一個一維數(shù)組,因此array[0]指向的數(shù)組就是{ 10, 0, 0, 20, 0 },其他的以此類推。
高維數(shù)組中的每個數(shù)據(jù)元素,保存的是低位數(shù)組的首地址。所以我們訪問array[0]就相當(dāng)于是在訪問二維數(shù)組中的第一個一維數(shù)組的首地址,這樣就可以得到第一個一維數(shù)組。
三. 多維數(shù)組
理論上,在Java中我們可以定義出任意維度的數(shù)組。但高于二維的多維數(shù)組,在實際開發(fā)中很少使用,大家知道Java中支持這種數(shù)據(jù)結(jié)構(gòu)即可。如果你感興趣,可以嘗試著自己構(gòu)造一個三維數(shù)組出來,就不在這里過多講解啦,可以參考如下:
//動態(tài)初始化 int[][][] arr= new int[3][3][2]; //靜態(tài)初始化 int[][][] arr2= { { {1,2,3},{4,5,6},{7,8,9} }, { {1,2},{3,4} }, { {1,2},{3,4,5} } };
四. 結(jié)語
至此,就把二維數(shù)組的內(nèi)容給大家介紹完了,現(xiàn)在你知道如何使用二維數(shù)組了嗎?二維數(shù)組的定義、動態(tài)和靜態(tài)初始化、內(nèi)存分析都是今天的重點,大家要牢牢掌握哦。
以上就是Java中二維數(shù)組的正確使用方法介紹的詳細(xì)內(nèi)容,更多關(guān)于Java 二維數(shù)組的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
IDEA創(chuàng)建Java?Web項目的超詳細(xì)圖文教學(xué)
IDEA是程序員們常用的java集成開發(fā)環(huán)境,也是被公認(rèn)為最好用的java開發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Java?Web項目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12SpringBoot生成License的實現(xiàn)示例
License指的是版權(quán)許可證,那么對于SpringBoot項目,如何增加License呢?本文就來介紹一下,感興趣的可以了解一下2021-06-06Spring Boot 接口參數(shù)加密解密的實現(xiàn)方法
這篇文章主要介紹了Spring Boot 接口參數(shù)加密解密的實現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03詳解spring-boot集成elasticsearch及其簡單應(yīng)用
本篇文章主要介紹了詳解spring-boot集成elasticsearch及其簡單應(yīng)用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06