Java入門(六):數組
數組是一種數據結構,用於存儲同一類型值的集合,也可以看做是數據類型一致的一組數據。
一、語法和聲明數組
1、語法:數據類型[ ] array = new 數據類型[長度];
註意:
使用長度創建數組的時候,每個元素都有默認值。
對於int、byt、short、long,其默認值為0;
對於double、float,其默認值為0.0;
對於boolean值,其默認值為false;
對於char,其默認值為編碼是0的字符;
對於引用類型(其中包括String),其默認值為null。
2、如果事先已經知道數組的元素,可以直接使用元素初始化數組,但是不需要寫數組長度,元素的個數就是數組長度。其次,例如int[ ] a 和int a[ ]兩種聲明都可用,但是不建議使用後面的寫法。
3、如果數據元素不多,並且知道每個元素的值,可以直接使用元素進行初始化。如果元素過多,使用長度創建數組。如果元素沒有初始值,使用長度初始化。
/** * 數組的聲明 */ public static void testMethod() { // 第一種寫法 int[] array = new int[3]; // int類型的默認值是0 System.out.println(array[0]); // 0 String[] strArray = new String[3]; // 於引用類型(其中包括String),其默認值為nullSystem.out.println(strArray[0]); // null // 數組聲明的第二種寫法 int[] array2 = {1,2,3}; System.out.println(array2[0]); // 1 // 下面這種寫法也可以,但是不建議使用,將[]緊跟在數據類型後面,方面理解和區分 int array3[] = {4,5,6}; System.out.println(array3[0]); // 4 }
二、訪問數組元素
1、使用 數組名[下標序號] 來訪問數組元素。
2、數組的 .length 屬性,可以獲取數組的長度,即數組元素個數。
3、數組下標範圍是從0開始,一直到 length-1 。
4、如果超範圍訪問,會出現運行異常,數組下標越界。下標小於0或者大於等於length,都是超範圍。
/** * 數組長度獲取,元素訪問 */ public static void arrayLength() { // 獲取數組的長度,使用 .length 屬性 int[] array = {1,2,3,4}; System.out.println(array.length); // 4 // 數組的長度一經定義,就不能改變,因為其length屬性是由final關鍵字修飾的,不可修改 //array.length = 5; // The final field array.length cannot be assigned // 訪問數組的元素,使用 [元素所在下標] , 下標從0開始 System.out.println(array[0]); // 打印數組第一個元素1 // 下標越界後,會出現 java.lang.ArrayIndexOutOfBoundsException 的異常 // System.out.println(array[4]); }
三、數組遍歷
利用for循環和for each循環,可以很輕松實現遍歷數組元素。
/** * 數組遍歷 */ public static void seeArrayElements() { int[] array = {1,2,3,4,5}; // for循環遍歷打印 for (int i=0; i<array.length; i++) { System.out.println(array[i]); } // for each遍歷打印,括號中的第一個參數是元素的數據類型 // 第二個參數是獲取值的局部變量名稱(可以隨意命名),第三個參數是數組名 for (int element : array) { System.out.println(element); } }
四、數組拷貝和擴容
1、數組拷貝。
使用java.util.Arrays類中的copyOf( )方法來實現,而Arrays.copyOf( )方法的實現原理是借助System類的arraycopy方法,感興趣的可以去嘗試自己造下輪子,然後和官方的arraycopy方法進行對比。
2、數組擴容。
數組在初始化完成後,其長度是不能修改的,那麽想要將一個數組長度變大或者變小,同樣可以借助Arrays.copyOf( )方法。無論數組是擴容還是變小,原數組是不會改變的,只是將對象換做了一個新數組。
/** * 復制數組,數組擴容,無論數組是擴容還是變小,原數組是不會改變的 */ public static void makeArrayCopy() { // 復制數組,這裏用到的是java.util.Arrays類中的copyOf()方法 int[] array = {2,4,6}; int[] newArray = Arrays.copyOf(array, array.length); // 判斷兩個數組是否相等,用到的是Arrays類中的equals()方法 System.out.println(Arrays.equals(array, newArray)); // true // 數組擴容 int[] addLength = Arrays.copyOf(array, array.length + 1); System.out.println(addLength.length); // 4 for (int e : addLength) { System.out.println(e); // 依次打印2 4 6 0 } // 數組變小 int[] addLength2 = Arrays.copyOf(array, array.length - 1); System.out.println(addLength2.length); // 2 for (int e : addLength2) { System.out.println(e); // 依次打印2 4 } }
五、數組排序
對數組的相鄰元素進行比較,按照升序或降序規則進行換位,最後得到排序後的數組。
/** * 對數組進行升序排序 */ public static void sortArrayAsc() { // 聲明並初始化一個數組 int[] array = {2, 10, 3, 78, 1, 29, 91, 5}; System.out.println(Arrays.toString(array)); for (int i=0; i<array.length-1; i++) { for (int j=0; j<array.length-i-1; j++) { if (array[j] > array[j+1]) { int k = array[j]; array[j] = array[j+1]; array[j+1] = k; } } } System.out.println(Arrays.toString(array)); } /** * 對數組進行降序排序 */ public static void sortArrayDesc() { // 聲明並初始化一個數組 int[] array = {2, 10, 3, 78, 1, 29, 91, 5}; // 將數組變為字符串輸出 System.out.println(Arrays.toString(array)); for (int i=0; i<array.length-1; i++) { for (int j=0; j<array.length-i-1; j++) { if (array[j] < array[j+1]) { int k = array[j]; array[j] = array[j+1]; array[j+1] = k; } } } System.out.println(Arrays.toString(array)); } /** * 利用Arrays.sort()方法進行排序 */ public static void utilSort() { // 聲明並初始化一個數組 int[] array = {2, 10, 3, 78, 1, 29, 91, 5}; System.out.println(Arrays.toString(array)); Arrays.sort(array); System.out.println(Arrays.toString(array)); }
六、二維數組
二維數組,從本質上來講,還是一維數組,對二維數組的操作其實還是對一維數組的操作。
1、聲明。類型[ ][ ] 變量名 = new 類型[ 長度 ][ 長度 ] ;
2、length屬性。其長度是第一個[ ]中的長度值。
3、下標也是從0開始,也遵循下標不能越界的規則。
4、其他操作也和一維數組的操作類似。
public static void stateTwoDimArray() { // 聲明一個二維數組 int[][] array = new int[2][3]; // 對其元素賦值 array[0][0] = 1; array[0][1] = 2; array[0][2] = 3; System.out.println(Arrays.toString(array[0])); // [1, 2, 3] System.out.println(Arrays.toString(array[1])); // [0, 0, 0] System.out.println(array.length); // 2 // 聲明並初始化一個二維數組 int[][] array2 = {{1,2},{3,4}}; System.out.println(Arrays.toString(array2[0])); // [1, 2] System.out.println(Arrays.toString(array2[1])); // [3, 4] System.out.println(array2.length); //2 }
上面的代碼都上傳至了GitHub,地址是https://github.com/XiaoChuan94/javalearning/tree/master/javalearningday05,有需要的可以去下載觀看,如果喜歡就給個star吧!如有不足,歡迎下方留言交流。
文章首發於我的個人公眾號:悅樂書。喜歡分享一路上聽過的歌,看過的電影,讀過的書,敲過的代碼,深夜的沈思。期待你的關註!
公眾號後臺輸入關鍵字“Java學習電子書”,即可獲得12本Java學習相關的電子書資源,如果經濟能力允許,還請支持圖書作者的紙質正版書籍,創作不易。
Java入門(六):數組