數組

數組

翻譯自ORACLE Java Tutorials –Arrays
數組是一個容器對象,它保存單個類型的固定數量的值。 創建數組時,建立數組的長度。 創建後,其長度是固定的。 你已經看到了一個數組的例子,在“Hello World!”的主要方法中。 應用。 本節將更詳細地討論數組。

這裏寫圖片描述

數組中的每個項目稱爲元素,每個元素都由其數字索引訪問。 如上圖所示,編號從0開始。例如,第9個元素將在索引8處被訪問。

以下程序ArrayDemo創建一個整數數組,在數組中放置一些值,並將每個值打印到標準輸出。

class ArrayDemo {
    public static void main(String[] args) {
        // 聲明爲整數數組
        int[] anArray;

        //給十個整數分配內存
        anArray = new int[10];

        // 初始化第一個元素
        anArray[0] = 100;
        // 初始化第二個元素
        anArray[1] = 200;
        // 等等
        anArray[2] = 300;
        anArray[3] = 400;
        anArray[4] = 500;
        anArray[5] = 600;
        anArray[6] = 700;
        anArray[7] = 800;
        anArray[8] = 900;
        anArray[9] = 1000;

        System.out.println("Element at index 0: "
                           + anArray[0]);
        System.out.println("Element at index 1: "
                           + anArray[1]);
        System.out.println("Element at index 2: "
                           + anArray[2]);
        System.out.println("Element at index 3: "
                           + anArray[3]);
        System.out.println("Element at index 4: "
                           + anArray[4]);
        System.out.println("Element at index 5: "
                           + anArray[5]);
        System.out.println("Element at index 6: "
                           + anArray[6]);
        System.out.println("Element at index 7: "
                           + anArray[7]);
        System.out.println("Element at index 8: "
                           + anArray[8]);
        System.out.println("Element at index 9: "
                           + anArray[9]);
    }
} 

該程序的輸出是:

Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400
Element at index 4: 500
Element at index 5: 600
Element at index 6: 700
Element at index 7: 800
Element at index 8: 900
Element at index 9: 1000

在現實世界的編程情境中,您可能會使用支持的循環結構之一來遍歷數組的每個元素,而不是像前面的示例一樣單獨寫入每一行。 但是,該示例清楚地說明了數組語法。 您將在“控制流程”部分中瞭解各種循環結構(for,while和do-while)。

聲明一個變量來引用一個數組

下面程序使用以下代碼行聲明一個數組(名爲anArray):

// 聲明一個整數數組
int[] anArray;

像其他類型的變量聲明一樣,數組聲明有兩個組件:數組的類型和數組的名稱。 數組的類型寫爲type [],其中type是包含元素的數據類型; 括號是指示此變量保存數組的特殊符號。 數組的大小不是其類型的一部分(這就是爲什麼括號爲空)。 數組的名稱可以是任何您想要的名稱,只要它遵循以前在命名部分中討論的規則和約定。 與其他類型的變量一樣,聲明實際上並不創建數組; 它只是告訴編譯器這個變量將保存一個指定類型的數組。

類似地,您可以聲明其他類型的數組:

byte[] anArrayOfBytes;
short[] anArrayOfShorts;
long[] anArrayOfLongs;
float[] anArrayOfFloats;
double[] anArrayOfDoubles;
boolean[] anArrayOfBooleans;
char[] anArrayOfChars;
String[] anArrayOfStrings;

您也可以在數組名稱後放置括號:

//這個方式是不鼓勵的
float anArrayOfFloats [];

然而,習慣上不鼓勵這種形式; 括號標識數組類型,並應顯示類型名稱。

創建,初始化和訪問數組

創建數組的一種方法是使用新的運算符。 ArrayDemo程序中的下一個語句爲10個整數元素分配一個具有足夠內存的數組,並將數組分配給anArray變量。

//創建一個整數數組
anArray = new int [10];

如果此語句丟失,則編譯器將打印如下所示的錯誤,並且編譯失敗:

ArrayDemo.java:4: Variable anArray may not have been initialized.

接下來的幾行將值分配給數組的每個元素:

anArray [0] = 100; //初始化第一個元素
anArray [1] = 200; //初始化第二個元素
aArray [2] = 300; //等等

每個數組元素都由其數字索引訪問:

System.out.println(“索引號爲0的元素1”+ anArray [0]);
System.out.println(“Index 2 at index 1:”+ anArray [1]);
System.out.println(“索引2中的元素3:”+ anArray [2]);

或者,您可以使用快捷方式語法來創建和初始化數組:

int[] anArray = { 
    100, 200, 300,
    400, 500, 600, 
    700, 800, 900, 1000
};

這裏,數組的長度由大括號之間提供的值的數量確定,並用逗號分隔。

您還可以通過使用兩個或更多個括號(例如String [] []名稱來聲明數組數組(也稱爲多維數組)。 因此,每個元素必須由相應數量的索引值訪問。

在Java編程語言中,多維數組是一個數組,其組件本身就是數組。 這與C或Fortran中的數組不同。 這樣做的結果是允許行的長度變化,如下面的MultiDimArrayDemo程序所示:

class MultiDimArrayDemo {
    public static void main(String[] args) {
        String[][] names = {
            {"Mr. ", "Mrs. ", "Ms. "},
            {"Smith", "Jones"}
        };
        // Mr. Smith
        System.out.println(names[0][0] + names[1][0]);
        // Ms. Jones
        System.out.println(names[0][2] + names[1][1]);
    }
}

該程序的輸出是:

Mr. Smith
Ms. Jones

最後,您可以使用內置的length屬性來確定任何數組的大小。 以下代碼將數組的大小打印到標準輸出:

System.out.println(anArray.length);

複製數組

System類有一個arraycopy方法,您可以使用它來有效地將數據從一個數組複製到另一個數組:

public static void arraycopy(Object src, int srcPos,
                             Object dest, int destPos, int length)

兩個Object參數指定要複製的數組和要複製的數組。三個int參數指定源數組中的起始位置,目標數組中的起始位置和要複製的數組元素的數量。

以下程序,ArrayCopyDemo,聲明一個char元素數組,拼寫“decaffeinated”一詞。它使用System.arraycopy方法將數組組件的子序列複製到第二個數組中:

class ArrayCopyDemo {
    public static void main(String[] args) {
        char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e',
                'i', 'n', 'a', 't', 'e', 'd' };
        char[] copyTo = new char[7];

        System.arraycopy(copyFrom, 2, copyTo, 0, 7);
        System.out.println(new String(copyTo));
    }
}

該程序的輸出是:

caffein

數組操作

數組是用於編程的強大而有用的概念。 Java SE提供了執行與數組相關的一些最常見操作的方法。例如,ArrayCopyDemo示例使用System類的arraycopy方法,而不是手動遍歷源數組的元素,並將每個元素放在目標數組中。這是在幕後執行的,使開發人員只能使用一行代碼來調用該方法。

爲了方便起見,Java SE提供了幾種在java.util.Arrays類中執行數組操作(常見任務,如複製,排序和搜索數組)的方法。例如,可以將上一個示例修改爲使用java.util.Arrays類的copyOfRange方法,您可以在ArrayCopyOfDemo示例中看到。不同的是,使用copyOfRange方法不需要在調用方法之前創建目標數組,因爲方法返回了目標數組:

class ArrayCopyOfDemo {
    public static void main(String[] args) {

        char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e',
            'i', 'n', 'a', 't', 'e', 'd'};

        char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);

        System.out.println(new String(copyTo));
    }
}

如您所見,該程序的輸出是相同的(caffein),儘管它需要較少的代碼行。請注意,copyOfRange方法的第二個參數是要複製的範圍的初始索引,包括第三個參數是要複製的範圍的最終索引。在此示例中,要複製的範圍不包括索引9(包含字符a)的數組元素。

java.util.Arrays類中的方法提供的一些其他有用的操作是:

  • 搜索數組以獲取特定值以獲取其放置的索引(binarySearch方法)。
  • 比較兩個數組以確定它們是否相等(equals方法)。
  • 填充數組以在每個索引中放置一個特定的值。(fill方法)
  • 將數組排列成升序。這可以使用sort方法或並行使用Java SE 8中引入的parallelSort方法順序完成。多處理器系統上的大型數組的並行排序比順序數組排序更快。(parallelSort方法)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章