數組
在實際應用中,通常有批量的數據需要處理,對於同一類型的批量數據,在程序中再通過定義單個的變量這種方式已經不能解決存儲大批量數據的問題了,因為它既不經濟,也不實際。對於這種類型的問題,Java提供了“數組(Array)”這種引用數據類型來解決。
認識數組
什么是數組
數組是按照一定順序排列的、用來存儲具有相同數據類型的數據的集合,可以使用共同的名字來引用數組中存儲的數據。
數組提供了一種數據分組的便利方法。在數組中,每一項數據都經過編號,可以通過數組的下標(即數據項在數組中的索引值,從0開始。例如,數組中第一項數據的下標為0,第二項數據的下標為1,第N項數據的下標為(N -1)來方便地訪問。
數組的特點
在不同的程序設計語言中,一般都提供有數組這種數據類型,功能和使用方法都很類似。不過Java語言中的數組有自己的幾個特點:
- Java中的數組,屬於引用數據類型,數組的元素可以是基本數據類型,也可以是引用數據類型;
- 數組元素的個數稱為數組的長度。數組長度一旦確定,就不能改變;
- 數組元素的下標是從0開始的,即第一個元素的下標是0;
- Java不支持多維數組,但是可以創建數組的數組;
- Java中將數組作為對象處理。數組對象含有成員變量length,用來表示數組的長度;
- 創建數組對象會在內存中開辟出一整塊連續的空間,而數組名中引用的是這塊連續空間的首地址
- 數組所創建的內存空間只能存儲相同類型的數據。
數組的聲明與創建
聲明一維數組變量
在創建和使用數組的過程中,首先要做的就是聲明一個數組變量,來保存實際的數組。聲明數組變量的含義如同聲明一個原始數據類型的變量,要指明數組將要容納的數據類型及數組的名字。聲明一維數組的語法如下:
數組類型[] 數組名字; //[ ]可以在名字前面或者后面都可以
數組類型 數組名字[];
這兩種數組變量聲明的方式在作用上是相同的,但通常建議采用第一種方式,它更符合數組變量的原理,即在數組名字前面指定數組可以保存的數據類型,這里使用方括號“[ ]”來代表數組類型。
創建一維數組對象
聲明了數組變量之后,下一步就需要創建一個數組對象,並將其賦給所聲明的數組變量。而創建數組對象,實際上就是在內存中分配相應大小的存儲空間給數組。有兩種方式可以用來創建數組對象。
//創建數組的三種方式
int[] arr1= new int[3];// 動態初始化:數組的初始化和數組的元素的賦值分開進行
int[] arr2 = new int[] { 1, 2, 3};//靜態初始化:數組的初始化和數組的元素的賦值操作同時進行
int[] arr2 = { 1, 2, 3};//不使用new,指定數組的長度為3,值為1,2,3
使用new運算符來創建數組對象時,必須指定這個數組的大小。創建數組對象時,僅僅是在內存中為數組變量分配指定大小的空間,並沒有實際存儲數據,這時數組的所有元素會被自動地賦予初值。
也可以通過把數組元素值直接放在大括號中的辦法來同時完成創建和初始化數組,這時將在內存中分配與元素數量相適應的空間大小,並賦予指定的元素值。使用這種方法創建數組對象時,大括號里的元素類型必須與指定的數據類型一致,並且數組的大小與大括號中包含的元素個數相同。
數組的使用
訪問一維數組元素
當創建了數組變量並賦予數組變量帶有初值的數組對象以后,就可以訪問一維數組中的元素了。訪問一維數組元素,使用該數組的名字,后跟數組下標,如以下代碼所示。
String[] studentNames = new String[10];
studentNames[0] = "張三";//訪問數組中的第一個元素
這里將數組studentNames的第一個元素studentNames[0]的值設置為字符串“張三”。一定要注意,在Java的數組中,下標是從0開始計數的,所以長度為n的數組第一個元素的下標為0,最后一個元素的下標為n -1。
修改一維數組元素
數組的大小不可改變,但數組中的元素值是可以改變的。在聲明一個數組變量和創建一個數組對象以后,可以通過為數組中的元素賦值,來修改數組中任一元素的值。請看下面的代碼。
int englishScore[ ] = new int[3]; //定義一個整型數組,用來保存三個同學的英語成績
//為三個同學的英語成績賦值
englishScore[0] = 98; //為第一個元素賦值
englishScore[1] = 72; //為第二個元素賦值
englishScore[2] = 65; //為第三個元素賦值
通常數組的大小會遠遠大於示例中的數組大小,所以在對數組進行操作時,一般都使用循環來重復一個數組元素,而不需要一個一個單獨地處理。
一維數組的遍歷
int[] a = new int[]{12, 13, 14};
for (int i = 0; i <= a.length - 1; i++) {
System.out.println(a[i]);
}
多維數組
數組元素除了可以是基本數據類型、對象類型之外,還可以是數組,即數組的元素是數組。所以雖然Java不支持多維數組,但是可以通過聲明數組的數組來實現同樣的功能。元素數組還可以包含數組,依此類推,最后創建出達到需要的任意維數。
聲明二維數組變量
在實際應用中,多維數組中使用最多的是二維數組。所以這次主要介紹二維數組的聲明、創建和使用,對於其他多維數組的聲明、創建和使用,與二維數組相似,。聲明二維數組的語法如下。
數組類型[ ][ ] 數組名字;
數組類型 數組名字[ ][ ];
這兩種數組變量聲明的方式在作用上是相同的,但通常建議采用第一種方式,與聲明一維數組類似。
創建二維數組對象
聲明了數組變量之后,下一步就需要創建一個數組對象,並將其賦給所聲明的數組變量。而創建數組對象實際上就是在內存中分配相應大小的存儲空間給數組。有兩種方式可以用來創建二維數組對象。
//1.使用new運算符
int[ ][ ] year = new int[52][7] ;
//2.直接初始化數組元素
int[][] arrays2={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
使用new運算符來創建二維數組對象時,必須指定這個數組的大小。在這個代碼中,創建了一個二維數組對象,用來保存一年中的52個星期及每個星期的7天。
可以把二維數組想象成一個二維表格,帶有行和列。其中行與二維數組的第一維對應,列與二維數組的第二維對應。
也可以通過把數組元素值直接放在大括號中的辦法,來同時完成創建和初始化二維數組。在大括號中使用逗號分隔每個花括號,每個花括號中為用逗號分開的行數據。這時將在內存中分配與元素數量相適應的空間大小,並賦予指定的元素值。
訪問二維數組元素
訪問二維數組元素,指的是讀取二維數組中指定位置的元素。要訪問二維數組元素,需使用該數組的名字,后面跟兩個中括號代表下標,第一個下標為行索引,第二個下標為列索引。如下代碼所示。
int[][] arrays2={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
System.out.println(arrays2[0][2]);
上述代碼輸出數組arrays2的第1行(下標為0)第3列(下標為2)的元素。可以看出,應該輸出的值為13。需要注意的是,在二維數組中,行和列的下標都是從0開始計數的。
修改二維數組元素
在聲明一個數組變量和創建一個二維數組對象以后,也可以通過為數組中的元素賦值,來修改數組中任一元素的值。這與修改一維數組很類似。請看下面的代碼。
int[ ][ ] arrays = {{11,12,13,14,15},{21,22,23,24,25}{31,32,33,34,35}};//定義二維數組
arraysarrays[0][0] = arrays[1][3] + arrays[2][0]; //將兩個數組元素相加
System.out.println(arrays[0][0]);//輸出結果為55
在這個示例中,讀取數組第2行第4列(行和列的下標都是從0開始計算)的元素值24,與數組第3 行第1 列的元素值31 相加,並將結果55 賦給數組第一行第一列的元素arrays[0][0],最后輸出arrays[0[0]的值55。通常在對二維數組進行操作時,一般都使用雙重循環來處理。
Arrays類
什么是Arrays類
Arrays類是數組的工具類java.util.Arrays。
由於數組對象本身並沒有什么方法可以供我們調用,但API中提供了一個工具類Arrays供我們使用,從而可以對數據對象進行一些基本的操作。
Arrays類中的方法都是static修飾的靜態方法,在使用的時候可以直接使用類名進行調用,而不用使用對象來調用。
常用方法
- 查找數組元素:通過binarySearch方法能對排序好的數組進行二分法操作。
- 數組轉字符串:Arrays.toString(array)
- 填充數組: Arrays.fill(array, 1, 4, 2)
- 數組的比較: Arrays.equals(array, array2)
- 數組的排序: Arrays.sort(array, 0, 4)
- 數組的復制: Arrays.copyOf(array, 3)
- 數組轉List: Arrays.asList(array)