Java從入門(mén)到起飛之?dāng)?shù)組使用詳解
1. 數(shù)組的概述
1.1 為什么需要數(shù)組
需求分析1:
需要統(tǒng)計(jì)某公司50個(gè)員工的工資情況,例如計(jì)算平均工資、找到最高工資等。用之前知識(shí),首先需要聲明50個(gè)變量
來(lái)分別記錄每位員工的工資,這樣會(huì)很麻煩。因此我們可以將所有的數(shù)據(jù)全部存儲(chǔ)到一個(gè)容器中統(tǒng)一管理,并使用容器進(jìn)行計(jì)算。
容器的概念:
- 生活中的容器:水杯(裝水等液體),衣柜(裝衣服等物品),集裝箱(裝貨物等)。
- 程序中的容器:將多個(gè)數(shù)據(jù)存儲(chǔ)到一起,每個(gè)數(shù)據(jù)稱為該容器的元素。
1.2 數(shù)組的概念
數(shù)組(Array),是多個(gè)相同類型數(shù)據(jù)按一定順序排列的集合,并使用一個(gè)名字命名,并通過(guò)編號(hào)的方式對(duì)這些數(shù)據(jù)進(jìn)行統(tǒng)一管理。
數(shù)組中的概念
- 數(shù)組名
- 下標(biāo)(或索引)
- 元素
- 數(shù)組的長(zhǎng)度
數(shù)組的特點(diǎn):
- 數(shù)組本身是引用數(shù)據(jù)類型,而數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
- 創(chuàng)建數(shù)組對(duì)象會(huì)在內(nèi)存中開(kāi)辟一整塊連續(xù)的空間。占據(jù)的空間的大小,取決于數(shù)組的長(zhǎng)度和數(shù)組中元素的類型。
- 數(shù)組中的元素在內(nèi)存中是依次緊密排列的,有序的。
- 數(shù)組,一旦初始化完成,其長(zhǎng)度就是確定的。數(shù)組的長(zhǎng)度一旦確定,就不能修改。
- 我們可以直接通過(guò)下標(biāo)(或索引)的方式調(diào)用指定位置的元素,速度很快。
- 數(shù)組名中引用的是這塊連續(xù)空間的首地址。
1.3 數(shù)組的分類
1、按照元素類型分:
- 基本數(shù)據(jù)類型元素的數(shù)組:每個(gè)元素位置存儲(chǔ)基本數(shù)據(jù)類型的值
- 引用數(shù)據(jù)類型元素的數(shù)組:每個(gè)元素位置存儲(chǔ)對(duì)象(本質(zhì)是存儲(chǔ)對(duì)象的首地址)(在面向?qū)ο蟛糠种v解)
2、按照維度分:
- 一維數(shù)組:存儲(chǔ)一組數(shù)據(jù)
- 二維數(shù)組:存儲(chǔ)多組數(shù)據(jù),相當(dāng)于二維表,一行代表一組數(shù)據(jù),只是這里的二維表每一行長(zhǎng)度不要求一樣。
2. 一維數(shù)組的使用
2.1 一維數(shù)組的聲明
格式:
//推薦 元素的數(shù)據(jù)類型[] 一維數(shù)組的名稱; //不推薦 元素的數(shù)據(jù)類型 一維數(shù)組名[];
舉例:
int[] arr; int arr1[]; double[] arr2; String[] arr3; //引用類型變量數(shù)組
數(shù)組的聲明,需要明確:
(1)數(shù)組的維度:在Java中數(shù)組的符號(hào)是[],[]表示一維,[][]表示二維。
(2)數(shù)組的元素類型:即創(chuàng)建的數(shù)組容器可以存儲(chǔ)什么數(shù)據(jù)類型的數(shù)據(jù)。元素的類型可以是任意的Java的數(shù)據(jù)類型。例如:int、String、Student等。
(3)數(shù)組名:就是代表某個(gè)數(shù)組的標(biāo)識(shí)符,數(shù)組名其實(shí)也是變量名,按照變量的命名規(guī)范來(lái)命名。數(shù)組名是個(gè)引用數(shù)據(jù)類型的變量,因?yàn)樗硪唤M數(shù)據(jù)。
舉例:
public class ArrayTest1 { public static void main(String[] args) { //比如,要存儲(chǔ)一個(gè)小組的成績(jī) int[] scores; int grades[]; // System.out.println(scores);//未初始化不能使用 //比如,要存儲(chǔ)一組字母 char[] letters; //比如,要存儲(chǔ)一組姓名 String[] names; //比如,要存儲(chǔ)一組價(jià)格 double[] prices; } }
注意:Java語(yǔ)言中聲明數(shù)組時(shí)不能指定其長(zhǎng)度(數(shù)組中元素的個(gè)數(shù))。 例如: int a[5]; //非法
2.2 一維數(shù)組的初始化
2.2.1 靜態(tài)初始化
如果數(shù)組變量的初始化和數(shù)組元素的賦值操作同時(shí)進(jìn)行,那就稱為靜態(tài)初始化。
靜態(tài)初始化,本質(zhì)是用靜態(tài)數(shù)據(jù)(編譯時(shí)已知)為數(shù)組初始化。此時(shí)數(shù)組的長(zhǎng)度由靜態(tài)數(shù)據(jù)的個(gè)數(shù)決定。
一維數(shù)組聲明和靜態(tài)初始化格式1:
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[]{元素1,元素2,元素3,...}; 或 數(shù)據(jù)類型[] 數(shù)組名; 數(shù)組名 = new 數(shù)據(jù)類型[]{元素1,元素2,元素3,...};
- new:關(guān)鍵字,創(chuàng)建數(shù)組使用的關(guān)鍵字。因?yàn)閿?shù)組本身是引用數(shù)據(jù)類型,所以要用new創(chuàng)建數(shù)組實(shí)體。
例如,定義存儲(chǔ)1,2,3,4,5整數(shù)的數(shù)組容器。
int[] arr = new int[]{1,2,3,4,5};//正確 //或 int[] arr; arr = new int[]{1,2,3,4,5};//正確
- 一維數(shù)組聲明和靜態(tài)初始化格式2:
數(shù)據(jù)類型[] 數(shù)組名 = {元素1,元素2,元素3...};//必須在一個(gè)語(yǔ)句中完成,不能分成兩個(gè)語(yǔ)句寫(xiě)
例如,定義存儲(chǔ)1,2,3,4,5整數(shù)的數(shù)組容器
int[] arr = {1,2,3,4,5};//正確 int[] arr; arr = {1,2,3,4,5};//錯(cuò)誤
舉例:
public class ArrayTest2 { public static void main(String[] args) { int[] arr = {1,2,3,4,5};//右邊不需要寫(xiě)new int[] int[] nums; nums = new int[]{10,20,30,40}; //聲明和初始化在兩個(gè)語(yǔ)句完成,就不能使用new int[] char[] word = {'h','e','l','l','o'}; String[] heros = {"袁隆平","鄧稼先","錢(qián)學(xué)森"}; System.out.println("arr數(shù)組:" + arr);//arr數(shù)組:[I@1b6d3586 System.out.println("nums數(shù)組:" + nums);//nums數(shù)組:[I@4554617c System.out.println("word數(shù)組:" + word);//word數(shù)組:[C@74a14482 System.out.println("heros數(shù)組:" + heros);//heros數(shù)組:[Ljava.lang.String;@1540e19d } }
2.2.2 動(dòng)態(tài)初始化
數(shù)組變量的初始化和數(shù)組元素的賦值操作分開(kāi)進(jìn)行,即為動(dòng)態(tài)初始化。
動(dòng)態(tài)初始化中,只確定了元素的個(gè)數(shù)(即數(shù)組的長(zhǎng)度),而元素值此時(shí)只是默認(rèn)值,還并未真正賦自己期望的值。真正期望的數(shù)據(jù)需要后續(xù)單獨(dú)一個(gè)一個(gè)賦值。
格式:
數(shù)組存儲(chǔ)的元素的數(shù)據(jù)類型[] 數(shù)組名字 = new 數(shù)組存儲(chǔ)的元素的數(shù)據(jù)類型[長(zhǎng)度]; 或 數(shù)組存儲(chǔ)的數(shù)據(jù)類型[] 數(shù)組名字; 數(shù)組名字 = new 數(shù)組存儲(chǔ)的數(shù)據(jù)類型[長(zhǎng)度];
[長(zhǎng)度]:數(shù)組的長(zhǎng)度,表示數(shù)組容器中可以最多存儲(chǔ)多少個(gè)元素。
**注意:數(shù)組有定長(zhǎng)特性,長(zhǎng)度一旦指定,不可更改。**和水杯道理相同,買(mǎi)了一個(gè)2升的水杯,總?cè)萘烤褪?升是固定的。
舉例1:正確寫(xiě)法
int[] arr = new int[5]; int[] arr; arr = new int[5];
舉例2:錯(cuò)誤寫(xiě)法
int[] arr = new int[5]{1,2,3,4,5};//錯(cuò)誤的,后面有{}指定元素列表,就不需要在[]中指定元素個(gè)數(shù)了。
2.3 一維數(shù)組的使用
2.3.1 數(shù)組的長(zhǎng)度
- 數(shù)組的元素總個(gè)數(shù),即數(shù)組的長(zhǎng)度
- 每個(gè)數(shù)組都有一個(gè)屬性length指明它的長(zhǎng)度,例如:arr.length 指明數(shù)組arr的長(zhǎng)度(即元素個(gè)數(shù))
- 每個(gè)數(shù)組都具有長(zhǎng)度,而且一旦初始化,其長(zhǎng)度就是確定,且是不可變的。
2.3.2 數(shù)組元素的引用
如何表示數(shù)組中的一個(gè)元素?
每一個(gè)存儲(chǔ)到數(shù)組的元素,都會(huì)自動(dòng)的擁有一個(gè)編號(hào),從0開(kāi)始,這個(gè)自動(dòng)編號(hào)稱為數(shù)組索引(index)或下標(biāo)
,可以通過(guò)數(shù)組的索引/下標(biāo)訪問(wèn)到數(shù)組中的元素。
數(shù)組名[索引/下標(biāo)]
數(shù)組的下標(biāo)范圍?
Java中數(shù)組的下標(biāo)從[0]開(kāi)始,下標(biāo)范圍是[0, 數(shù)組的長(zhǎng)度-1],即[0, 數(shù)組名.length-1]
數(shù)組元素下標(biāo)可以是整型常量或整型表達(dá)式。如a[3] , b[i] , c[6*i];
舉例
public class ArrayTest3 { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; System.out.println("arr數(shù)組的長(zhǎng)度:" + arr.length); System.out.println("arr數(shù)組的第1個(gè)元素:" + arr[0]);//下標(biāo)從0開(kāi)始 System.out.println("arr數(shù)組的第2個(gè)元素:" + arr[1]); System.out.println("arr數(shù)組的第3個(gè)元素:" + arr[2]); System.out.println("arr數(shù)組的第4個(gè)元素:" + arr[3]); System.out.println("arr數(shù)組的第5個(gè)元素:" + arr[4]); //修改第1個(gè)元素的值 //此處arr[0]相當(dāng)于一個(gè)int類型的變量 arr[0] = 100; System.out.println("arr數(shù)組的第1個(gè)元素:" + arr[0]); } }
2.4 一維數(shù)組的遍歷
將數(shù)組中的每個(gè)元素分別獲取出來(lái),就是遍歷
。for循環(huán)與數(shù)組的遍歷是絕配。
舉例1
public class ArrayTest4 { public static void main(String[] args) { int[] arr = new int[]{1,2,3,4,5}; //打印數(shù)組的屬性,輸出結(jié)果是5 System.out.println("數(shù)組的長(zhǎng)度:" + arr.length); //遍歷輸出數(shù)組中的元素 System.out.println("數(shù)組的元素有:"); for(int i=0; i<arr.length; i++){ System.out.println(arr[i]); } } }
舉例2
public class ArrayTest5 { public static void main(String[] args) { int[] arr = new int[5]; System.out.println("arr數(shù)組的長(zhǎng)度:" + arr.length); System.out.print("存儲(chǔ)數(shù)據(jù)到arr數(shù)組之前:["); for (int i = 0; i < arr.length; i++) { if(i==0){ System.out.print(arr[i]); }else{ System.out.print("," + arr[i]); } } System.out.println("]"); //初始化 /* arr[0] = 2; arr[1] = 4; arr[2] = 6; arr[3] = 8; arr[4] = 10; */ for (int i = 0; i < arr.length; i++) { arr[i] = (i+1) * 2; } System.out.print("存儲(chǔ)數(shù)據(jù)到arr數(shù)組之后:["); for (int i = 0; i < arr.length; i++) { if(i==0){ System.out.print(arr[i]); }else{ System.out.print("," + arr[i]); } } System.out.println("]"); } }
2.5 數(shù)組元素的默認(rèn)值
數(shù)組是引用類型,當(dāng)我們使用動(dòng)態(tài)初始化方式創(chuàng)建數(shù)組時(shí),元素值只是默認(rèn)值。例如:
public class ArrayTest6 { public static void main(String argv[]){ int a[]= new int[5]; System.out.println(a[3]); //a[3]的默認(rèn)值為0 } }
對(duì)于基本數(shù)據(jù)類型而言,默認(rèn)初始化值各有不同。
對(duì)于引用數(shù)據(jù)類型而言,默認(rèn)初始化值為null(注意與0不同!)
public class ArrayTest7 { public static void main(String[] args) { //存儲(chǔ)26個(gè)字母 char[] letters = new char[26]; System.out.println("letters數(shù)組的長(zhǎng)度:" + letters.length); System.out.print("存儲(chǔ)字母到letters數(shù)組之前:["); for (int i = 0; i < letters.length; i++) { if(i==0){ System.out.print(letters[i]); }else{ System.out.print("," + letters[i]); } } System.out.println("]"); //存儲(chǔ)5個(gè)姓名 String[] names = new String[5]; System.out.println("names數(shù)組的長(zhǎng)度:" + names.length); System.out.print("存儲(chǔ)姓名到names數(shù)組之前:["); for (int i = 0; i < names.length; i++) { if(i==0){ System.out.print(names[i]); }else{ System.out.print("," + names[i]); } } System.out.println("]"); } }
3. 多維數(shù)組的使用
3.1 概述
Java 語(yǔ)言里提供了支持多維數(shù)組的語(yǔ)法。
如果說(shuō)可以把一維數(shù)組當(dāng)成幾何中的線性圖形,那么二維數(shù)組就相當(dāng)于是一個(gè)表格,像Excel中的表格、圍棋棋盤(pán)一樣。
應(yīng)用舉例1:
某公司2022年全年各個(gè)月份的銷售額進(jìn)行登記。按月份存儲(chǔ),可以使用一維數(shù)組。如下:
int[] monthData = new int[]{23,43,22,34,55,65,44,67,45,78,67,66};
如果改寫(xiě)為按季度為單位存儲(chǔ)怎么辦呢?
int[][] quarterData = new int[][]{{23,43,22},{34,55,65},{44,67,45},{78,67,66}};
- 應(yīng)用舉例2:
高一年級(jí)三個(gè)班級(jí)均由多個(gè)學(xué)生姓名構(gòu)成一個(gè)個(gè)數(shù)組。如下:
String[] class1 = new String[]{"段譽(yù)","令狐沖","任我行"}; String[] class2 = new String[]{"張三豐","周芷若"}; String[] class3 = new String[]{"趙敏","張無(wú)忌","韋小寶","楊過(guò)"};
藍(lán)框的幾個(gè)元素,可以使用一維數(shù)組來(lái)存儲(chǔ)。但現(xiàn)在發(fā)現(xiàn)每個(gè)元素下還有下拉框,其內(nèi)部還有元素,那就需要使用二維數(shù)組來(lái)存儲(chǔ):
使用說(shuō)明
- 對(duì)于二維數(shù)組的理解,可以看成是一維數(shù)組array1又作為另一個(gè)一維數(shù)組array2的元素而存在。
- 其實(shí),從數(shù)組底層的運(yùn)行機(jī)制來(lái)看,其實(shí)沒(méi)有多維數(shù)組。
3.2 聲明與初始化
3.2.1 聲明
二維數(shù)組聲明的語(yǔ)法格式:
//推薦 元素的數(shù)據(jù)類型[][] 二維數(shù)組的名稱; //不推薦 元素的數(shù)據(jù)類型 二維數(shù)組名[][]; //不推薦 元素的數(shù)據(jù)類型[] 二維數(shù)組名[];
例如:
public class Test20TwoDimensionalArrayDefine { public static void main(String[] args) { //存儲(chǔ)多組成績(jī) int[][] grades; //存儲(chǔ)多組姓名 String[][] names; } }
面試:
int[] x, y[]; //x是一維數(shù)組,y是二維數(shù)組
3.2.2 靜態(tài)初始化
格式:
int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}};
定義一個(gè)名稱為arr的二維數(shù)組,二維數(shù)組中有三個(gè)一維數(shù)組
- 每一個(gè)一維數(shù)組中具體元素也都已初始化
- 第一個(gè)一維數(shù)組 arr[0] = {3,8,2};
- 第二個(gè)一維數(shù)組 arr[1] = {2,7};
- 第三個(gè)一維數(shù)組 arr[2] = {9,0,1,6};
- 第三個(gè)一維數(shù)組的長(zhǎng)度表示方式:arr[2].length;
- 注意特殊寫(xiě)法情況:int[] x,y[]; x是一維數(shù)組,y是二維數(shù)組。
- 舉例1:
int[][] arr = {{1,2,3},{4,5,6},{7,8,9,10}};//聲明與初始化必須在一句完成 int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}}; int[][] arr; arr = new int[][]{{1,2,3},{4,5,6},{7,8,9,10}}; arr = new int[3][3]{{1,2,3},{4,5,6},{7,8,9,10}};//錯(cuò)誤,靜態(tài)初始化右邊new 數(shù)據(jù)類型[][]中不能寫(xiě)數(shù)字
- 舉例2:
public class TwoDimensionalArrayInitialize { public static void main(String[] args) { //存儲(chǔ)多組成績(jī) int[][] grades = { {89,75,99,100}, {88,96,78,63,100,86}, {56,63,58}, {99,66,77,88} }; //存儲(chǔ)多組姓名 String[][] names = { {"張三","李四", "王五", "趙六"}, {"劉備","關(guān)羽","張飛","諸葛亮","趙云","馬超"}, {"曹丕","曹植","曹沖"}, {"孫權(quán)","周瑜","魯肅","黃蓋"} }; } }
3.2.3 動(dòng)態(tài)初始化
如果二維數(shù)組的每一個(gè)數(shù)據(jù),甚至是每一行的列數(shù),需要后期單獨(dú)確定,那么就只能使用動(dòng)態(tài)初始化方式了。動(dòng)態(tài)初始化方式分為兩種格式:
格式1:規(guī)則二維表:每一行的列數(shù)是相同的
//(1)確定行數(shù)和列數(shù) 元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[m][n]; //其中,m:表示這個(gè)二維數(shù)組有多少個(gè)一維數(shù)組?;蛘哒f(shuō)一共二維表有幾行 //其中,n:表示每一個(gè)一維數(shù)組的元素有多少個(gè)?;蛘哒f(shuō)每一行共有一個(gè)單元格 //此時(shí)創(chuàng)建完數(shù)組,行數(shù)、列數(shù)確定,而且元素也都有默認(rèn)值 //(2)再為元素賦新值 二維數(shù)組名[行下標(biāo)][列下標(biāo)] = 值;
舉例:
int[][] arr = new int[3][2];
定義了名稱為arr的二維數(shù)組
二維數(shù)組中有3個(gè)一維數(shù)組
每一個(gè)一維數(shù)組中有2個(gè)元素
一維數(shù)組的名稱分別為arr[0], arr[1], arr[2]
給第一個(gè)一維數(shù)組1腳標(biāo)位賦值為78寫(xiě)法是:
arr[0][1] = 78;
格式2:不規(guī)則:每一行的列數(shù)不一樣
//(1)先確定總行數(shù) 元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[總行數(shù)][]; //此時(shí)只是確定了總行數(shù),每一行里面現(xiàn)在是null //(2)再確定每一行的列數(shù),創(chuàng)建每一行的一維數(shù)組 二維數(shù)組名[行下標(biāo)] = new 元素的數(shù)據(jù)類型[該行的總列數(shù)]; //此時(shí)已經(jīng)new完的行的元素就有默認(rèn)值了,沒(méi)有new的行還是null //(3)再為元素賦值 二維數(shù)組名[行下標(biāo)][列下標(biāo)] = 值;
舉例:
int[][] arr = new int[3][];
- 二維數(shù)組中有3個(gè)一維數(shù)組。
- 每個(gè)一維數(shù)組都是默認(rèn)初始化值null (注意:區(qū)別于格式1)
- 可以對(duì)這個(gè)三個(gè)一維數(shù)組分別進(jìn)行初始化:arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2];
- 注:
int[][]arr = new int[][3];
//非法
練習(xí):
/* 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 */ public class Test25DifferentElementCount { public static void main(String[] args){ //1、聲明一個(gè)二維數(shù)組,并且確定行數(shù) //因?yàn)槊恳恍械牧袛?shù)不同,這里無(wú)法直接確定列數(shù) int[][] arr = new int[5][]; //2、確定每一行的列數(shù) for(int i=0; i<arr.length; i++){ /* arr[0] 的列數(shù)是1 arr[1] 的列數(shù)是2 arr[2] 的列數(shù)是3 arr[3] 的列數(shù)是4 arr[4] 的列數(shù)是5 */ arr[i] = new int[i+1]; } //3、確定元素的值 for(int i=0; i<arr.length; i++){ for(int j=0; j<arr[i].length; j++){ arr[i][j] = i+1; } } //4、遍歷顯示 for(int i=0; i<arr.length; i++){ for(int j=0; j<arr[i].length; j++){ System.out.print(arr[i][j] + " "); } System.out.println(); } } }
3.3 數(shù)組的長(zhǎng)度和角標(biāo)
- 二維數(shù)組的長(zhǎng)度/行數(shù):二維數(shù)組名.length
- 二維數(shù)組的某一行:二維數(shù)組名[行下標(biāo)],此時(shí)相當(dāng)于獲取其中一組數(shù)據(jù)。它本質(zhì)上是一個(gè)一維數(shù)組。行下標(biāo)的范圍:[0, 二維數(shù)組名.length-1]。此時(shí)把二維數(shù)組看成一維數(shù)組的話,元素是行對(duì)象。
- 某一行的列數(shù):二維數(shù)組名[行下標(biāo)].length,因?yàn)槎S數(shù)組的每一行是一個(gè)一維數(shù)組。
- 某一個(gè)元素:二維數(shù)組名[行下標(biāo)][列下標(biāo)],即先確定行/組,再確定列。
public class Test22TwoDimensionalArrayUse { public static void main(String[] args){ //存儲(chǔ)3個(gè)小組的學(xué)員的成績(jī),分開(kāi)存儲(chǔ),使用二維數(shù)組。 /* int[][] scores1; int scores2[][]; int[] scores3[];*/ int[][] scores = { {85,96,85,75}, {99,96,74,72,75}, {52,42,56,75} }; System.out.println(scores);//[[I@15db9742 System.out.println("一共有" + scores.length +"組成績(jī)."); //[[:代表二維數(shù)組,I代表元素類型是int System.out.println(scores[0]);//[I@6d06d69c //[:代表一維數(shù)組,I代表元素類型是int System.out.println(scores[1]);//[I@7852e922 System.out.println(scores[2]);//[I@4e25154f //System.out.println(scores[3]);//ArrayIndexOutOfBoundsException: 3 System.out.println("第1組有" + scores[0].length +"個(gè)學(xué)員."); System.out.println("第2組有" + scores[1].length +"個(gè)學(xué)員."); System.out.println("第3組有" + scores[2].length +"個(gè)學(xué)員."); System.out.println("第1組的每一個(gè)學(xué)員成績(jī)?nèi)缦拢?); //第一行的元素 System.out.println(scores[0][0]);//85 System.out.println(scores[0][1]);//96 System.out.println(scores[0][2]);//85 System.out.println(scores[0][3]);//75 //System.out.println(scores[0][4]);//java.lang.ArrayIndexOutOfBoundsException: 4 } }
3.4 二維數(shù)組的遍歷
- 格式:
for(int i=0; i<二維數(shù)組名.length; i++){ //二維數(shù)組對(duì)象.length for(int j=0; j<二維數(shù)組名[i].length; j++){//二維數(shù)組行對(duì)象.length System.out.print(二維數(shù)組名[i][j]); } System.out.println(); }
- 舉例:
public class Test23TwoDimensionalArrayIterate { public static void main(String[] args) { //存儲(chǔ)3個(gè)小組的學(xué)員的成績(jī),分開(kāi)存儲(chǔ),使用二維數(shù)組。 int[][] scores = { {85,96,85,75}, {99,96,74,72,75}, {52,42,56,75} }; System.out.println("一共有" + scores.length +"組成績(jī)."); for (int i = 0; i < scores.length; i++) { System.out.print("第" + (i+1) +"組有" + scores[i].length + "個(gè)學(xué)員,成績(jī)?nèi)缦拢?); for (int j = 0; j < scores[i].length; j++) { System.out.print(scores[i][j]+"\t"); } System.out.println(); } } }
4. Arrays工具類的使用
java.util.Arrays類即為操作數(shù)組的工具類,包含了用來(lái)操作數(shù)組(比如排序和搜索)的各種方法。 比如:
- 數(shù)組元素拼接
- static String toString(int[] a) :字符串表示形式由數(shù)組的元素列表組成,括在方括號(hào)(“[]”)中。相鄰元素用字符 ", "(逗號(hào)加空格)分隔。形式為:[元素1,元素2,元素3。。。]
- static String toString(Object[] a) :字符串表示形式由數(shù)組的元素列表組成,括在方括號(hào)(“[]”)中。相鄰元素用字符 ", "(逗號(hào)加空格)分隔。元素將自動(dòng)調(diào)用自己從Object繼承的toString方法將對(duì)象轉(zhuǎn)為字符串進(jìn)行拼接,如果沒(méi)有重寫(xiě),則返回類型@hash值,如果重寫(xiě)則按重寫(xiě)返回的字符串進(jìn)行拼接。
- 數(shù)組排序
- static void sort(int[] a) :將a數(shù)組按照從小到大進(jìn)行排序
- static void sort(int[] a, int fromIndex, int toIndex) :將a數(shù)組的[fromIndex, toIndex)部分按照升序排列
- static void sort(Object[] a) :根據(jù)元素的自然順序?qū)χ付▽?duì)象數(shù)組按升序進(jìn)行排序。
- static void sort(T[] a, Comparator<? super T> c) :根據(jù)指定比較器產(chǎn)生的順序?qū)χ付▽?duì)象數(shù)組進(jìn)行排序。
- 數(shù)組元素的二分查找
- static int binarySearch(int[] a, int key) 、static int binarySearch(Object[] a, Object key) :要求數(shù)組有序,在數(shù)組中查找key是否存在,如果存在返回第一次找到的下標(biāo),不存在返回負(fù)數(shù)。
- 數(shù)組的復(fù)制
- static int[] copyOf(int[] original, int newLength) :根據(jù)original原數(shù)組復(fù)制一個(gè)長(zhǎng)度為newLength的新數(shù)組,并返回新數(shù)組
- static T[] copyOf(T[] original,int newLength):根據(jù)original原數(shù)組復(fù)制一個(gè)長(zhǎng)度為newLength的新數(shù)組,并返回新數(shù)組
- static int[] copyOfRange(int[] original, int from, int to) :復(fù)制original原數(shù)組的[from,to)構(gòu)成新數(shù)組,并返回新數(shù)組
- static T[] copyOfRange(T[] original,int from,int to):復(fù)制original原數(shù)組的[from,to)構(gòu)成新數(shù)組,并返回新數(shù)組
- 比較兩個(gè)數(shù)組是否相等
- static boolean equals(int[] a, int[] a2) :比較兩個(gè)數(shù)組的長(zhǎng)度、元素是否完全相同
- static boolean equals(Object[] a,Object[] a2):比較兩個(gè)數(shù)組的長(zhǎng)度、元素是否完全相同
- 填充數(shù)組
- static void fill(int[] a, int val) :用val值填充整個(gè)a數(shù)組
- static void fill(Object[] a,Object val):用val對(duì)象填充整個(gè)a數(shù)組
- static void fill(int[] a, int fromIndex, int toIndex, int val):將a數(shù)組[fromIndex,toIndex)部分填充為val值
- static void fill(Object[] a, int fromIndex, int toIndex, Object val) :將a數(shù)組[fromIndex,toIndex)部分填充為val對(duì)象
舉例:java.util.Arrays類的sort()方法提供了數(shù)組元素排序功能:
import java.util.Arrays; public class SortTest { public static void main(String[] args) { int[] arr = {3, 2, 5, 1, 6}; System.out.println("排序前" + Arrays.toString(arr)); Arrays.sort(arr); System.out.println("排序后" + Arrays.toString(arr)); } }
總結(jié)
到此這篇關(guān)于Java從入門(mén)到起飛之?dāng)?shù)組使用的文章就介紹到這了,更多相關(guān)Java數(shù)組詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JAVA初級(jí)項(xiàng)目——實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
這篇文章主要介紹了JAVA如何實(shí)現(xiàn)圖書(shū)管理系統(tǒng),文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06Java8時(shí)間api之LocalDate/LocalDateTime的用法詳解
在項(xiàng)目中,時(shí)間的使用必不可少,而java8之前的時(shí)間api?Date和Calander等在使用上存在著很多問(wèn)題,于是,jdk1.8引進(jìn)了新的時(shí)間api-LocalDateTime,本文就來(lái)講講它的具體使用吧2023-05-05Springboot通過(guò)run啟動(dòng)web應(yīng)用的方法
這篇文章主要介紹了Springboot通過(guò)run啟動(dòng)web應(yīng)用的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Win10?IDEA如何連接虛擬機(jī)中的Hadoop(HDFS)
在虛擬機(jī)上配置Hadoop并修改core-site.xml文件,設(shè)置IP為局域網(wǎng)地址,IDEA中創(chuàng)建Maven項(xiàng)目,添加依賴,并檢查Hadoop重啟和端口轉(zhuǎn)發(fā),提供test.bat文件,通過(guò)修改IP簡(jiǎn)化使用過(guò)程2024-11-11簡(jiǎn)單解析execute和submit有什么區(qū)別
這篇文章主要介紹了簡(jiǎn)單解析execute和submit有什么區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11xxl-job 帶參數(shù)執(zhí)行和高可用部署方法
這篇文章主要介紹了xxl-job 帶參數(shù)執(zhí)行和高可用部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04