黃階低級 - 《 Java 核心》- 3.10 數組 - 修改0次

數組

  • 一旦創建了數組,就不能改變大小;爲了擴展數組的大小,應使用另一種數據結構——數組列表 ( array list )。
  • foreach 循環可以依次處理元素集合的每個元素而不用爲下標擔心,尤其在需要處理集合中的所有元素時更加方便。
int[] a = { 1, 3, 5, 7, 9 };
for (int i : a) {
    System.out.print(i + " ");
}
//輸出 1 3 5 7 9
  • 有個更簡單的打印數組中的所有的值,即利用 Array 類的 toString 方法:
int[] a = { 1, 2, 3, 4, 5 };
System.out.println(Arrays.toString(a));
/*
 * 輸出 [1, 2, 3, 4, 5] 
 * 注意是Arrays.toString(a),而不是a.toString!!!
*/
  • Java 中的 [ ] 運算符被預定義爲檢查數組邊界,而且沒有指針運算,即不能通過 a 加 1 得到數組的下一個元素。
  • Java 數組與 C++ 的數組有很大不同,但基本和 C++ 的指針數組一樣。

1、數組拷貝

  • 在 Java 中,將一個數組變量拷貝給另一個數組變量,這時兩個變量將引用同一個數組!
int[] a = { 1, 2, 3, 4, 5 };
int[] b = a;
b[3] = 12;
System.out.println(a[3]);
// 輸出 12 ,說明此時兩變量指向同一個數組!
  • 數組值的完全拷貝和擴展數組,可以使用 Arrays 類的 copyOf 方法:
int[] a = { 1, 2, 3, 4, 5 };
int[] b = Arrays.copyOf(a, 2 * a.length);
System.out.println(Arrays.toString(b));
// 輸出 [1, 2, 3, 4, 5, 0, 0, 0, 0, 0] 

2、有意思的命令行參數

  • 每一個 Java 程序都有一個帶 String arg[]參數的 main 方法。這個參數表明 main 方法將接受一個字符串數組,也就是命令行參數。
  • 在 main 方法中,程序名並沒有存儲在 args 數組中。
public class Message {
    public static void main(String[] args) {
        if (args[0].equals("-h"))// 字符串比較不用 ==
            System.out.println("hello:");
        for (String i : args)
            System.out.println(i);
        for (int i = 0;i < args.length; i++)
            System.out.println(args[i]);
    }
}

這裏寫圖片描述

3、數組排序

  • 對數值型數組進行排序,可以使用 Arrays 類的 sort 方法:
int[] a = { 1, 9, 5, 7, 2, 4, 10 };
Arrays.sort(a);
for (int i : a) {
    System.out.print(i + " ");
}//輸出 1 2 4 5 7 9 10 

4、多維數組

  • 要想快速打印一個二維數組的數據元素列表,可以使用 Arrays 類的 deepToString 方法:
int[][] a = { { 1, 9, 5 }, { 7, 2, 4 }, { 10, 34, 45 }, };
System.out.println(Arrays.deepToString(a));
//輸出 [[1, 9, 5], [7, 2, 4], [10, 34, 45]]
  • for each 循環語句不能自動處理二維數組的每一個元素,需要使用兩個嵌套的循環:
int[][] a = { { 1, 9, 5 }, { 7, 2, 4 }, { 10, 34, 45 } };
for (int[] row : a)
    for (int i : row)
        System.out.print(i + " ");
// 輸出 1 9 5 7 2 4 10 34 45 

5、不規則數組

Java 的優勢: java 實際上沒有多維數組,只有一維數組,多維數組被解釋成“數組的數組”

  • 由於可以單獨的存取數據的某一行,所以可以讓兩行交換:
int[][] a = { { 1, 9, 5 }, { 7, 2, 4 }, { 10, 34, 45 } };
int[] temp = a[1];
a[1] = a[2];
a[2] = temp;
System.out.println(Arrays.deepToString(a));
//輸出 [[1, 9, 5], [10, 34, 45], [7, 2, 4]]
  • 還可以方便的構造一個“不規則”的數組,即數組的每一行有不同的長度:
public class LotteryArray {
    public static void main(String[] args) {
        final int NMAX = 4;

        // 分配不規則數組,獨立分配行數組
        int[][] odds = new int[NMAX + 1][];
        for (int n = 0; n <= NMAX; n++)
            odds[n] = new int[n + 1];

        // 填充不規則數組
        for (int n = 0; n < odds.length; n++)
            for (int k = 0; k < odds[n].length; k++) {
                for (int i = 1; i <= k; i++)
                    odds[n][k] = k;
            }

        // 打印不規則數組
        for (int[] row : odds) {
            for (int odd : row)
                System.out.printf("%4d", odd);
            System.out.println();
        }
    }
}

輸出:
0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

發佈了41 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章