1. 程式人生 > >Java入門(六):數組

Java入門(六):數組

屬性 array 初始 圖片 nbsp 遍歷 屬性。 語法 規則

數組是一種數據結構,用於存儲同一類型值的集合,也可以看做是數據類型一致的一組數據。

一、語法和聲明數組

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),其默認值為null
System.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入門(六):數組