JavaRush /Java Blog /Random-TW /Java 中的數組

Java 中的數組

在 Random-TW 群組發布
想像一下儲藏室裡的細胞。每個都有自己的編號,並且每個都包含某種“行李”物件。或者是一份酒單,其中所有類型的酒都編號,當您下訂單時,只需給出飲料的編號即可。或一個小組中的學生列表,其中學生“Andreev”將寫在第一個單元格中,“Yakovlev”將寫在最後一個單元格中。或者是一份飛機乘客名單,每個人都被分配了一個有特定編號的座位。在Java中,為了處理相似的結構,即大量同質數據,經常使用Java中的陣列。

什麼是數組?

數組是一種儲存相同類型元素的資料結構。它可以被認為是一組編號的單元格,每個單元格可以包含一些資料(每個單元格一個資料元素)。對特定小區的存取是透過其號碼進行的。數組中元素的編號也稱為索引。就Java而言,陣列是同質的,也就是說,它的所有儲存格都將儲存相同類型的元素。因此,整數數組僅包含整數(例如int類型),字串數組僅包含字串,我們創建的Dog類別的元素數組將僅包含Dog物件。也就是說,在 Java 中,我們不能將整數放入數組的第一個單元格中,將字串放入第二個單元格中,並將「狗」放入第三個單元格中。 Java 中的數組

數組聲明

如何聲明一個數組?

與任何變數一樣,Java 中的陣列必須宣告。您可以透過以下兩種方式之一執行此操作。它們是等價的,但第一個更符合Java風格。第二個是 C 語言的遺留問題(許多 C 程式設計師轉向 Java,為了方便起見,留下了替代方法)。該表顯示了在 Java 中聲明數組的兩種方法:
不。 數組聲明,Java 語法 例子 一則評論
1.
dataType[] arrayName;
int[] myArray;

Object[]
arrayOfObjects;
建議以這種方式聲明數組,這是Java風格
2.
dataType arrayName[];
int myArray[];

Object
arrayOfObjects[];
從 C/C++ 繼承的宣告數組的方法也適用於 Java
在這兩種情況下,dataType都是數組中變數的類型。在範例中我們聲明了兩個陣列。一個將儲存int類型的整數,另一個將儲存Object類型的物件。因此,當聲明一個陣列時,它有一個名稱和一個類型(數組變數的類型)。arrayName是數組的名稱。

建立數組

如何建立數組?

與其他物件一樣,您可以使用new運算子建立 Java 數組,即為其保留記憶體空間。這是這樣完成的:
new typeOfArray [length];
其中typeOfArray是陣列的型別,length是陣列的長度(即儲存格數),以整數 ( int ) 表示。然而,這裡我們只為數組分配了內存,但沒有將創建的數組與任何先前聲明的變數關聯起來。通常數組是先聲明然後創建的,例如:
int[] myArray; // array declaration
myArray = new int[10]; // creation, that is, allocation of memory for an array of 10 elements of type int
這裡我們聲明了一個名為myArray 的整數數組,然後聲明它由 10 個單元組成(每個單元將儲存一個整數)。但是,更常見的是使用以下簡寫語法在聲明後立即建立陣列:
int[] myArray = new int[10]; // declaration and allocation of memory "in one bottle"
筆記:使用new創建數組後,其單元格將填充預設值。對於數字類型(如我們的範例),這將為 0,對於布林值- false,對於引用類型 - null。因此,手術後
int[] myArray = new int[10];
我們得到一個由 10 個整數組成的數組,並且在程式期間該數組發生變化之前,每個單元格都包含一個 0。

有關數組的更多資訊可以在文章“關於數組的一些事情”中找到

Java中的數組長度

正如我們上面所說,陣列的長度是陣列設計的元素數量。數組的長度一旦創建就無法更改。 筆記:在 Java 中,陣列元素從零開始編號。也就是說,如果我們有一個包含 10 個元素的數組,則該數組的第一個元素的索引為 0,最後一個元素的索引為 9。您可以使用 lengthJava 中的陣列 - 3變數存取數組的長度。例子:
int[] myArray = new int[10]; // created an array of integers with 10 elements and named it myArray
System.out.println(myArray.length); // printed to the console the length of the array, that is, the number of elements that we can put in the array
程式輸出:
10

初始化數組並存取其元素

如何在Java中建立陣列已經很清楚了。在這個過程之後,我們不會得到一個空數組,而是一個填滿有預設值的數組。例如,在int的情況下,這些將為 0,如果我們有一個包含引用類型資料的數組,則預設情況下,每個單元格中都會寫入null。我們透過索引存取數組元素(即,向其中寫入值或將其顯示在螢幕上或對其執行某些操作)。初始化數組就是用特定的資料填充它(預設不是)。 範例:讓我們建立一個包含 4 個季節的數組,並用字串值(這些季節的名稱)填滿它。
String[] seasons  = new String[4]; /* declared and created an array. Java allocated memory for an array of 4 strings, and now each cell is null (because the string is a reference type)*/

seasons[0] = "Winter"; /* in the first cell, that is, in the cell with a zero number, we wrote the string Winter. Here we get access to the zero element of the array and write a specific value there */
seasons[1] = "Spring"; // do the same procedure with cell number 1 (second)
seasons[2] = "Summer"; // ...number 2
seasons[3] = "Autumn"; // and with the last one, number 3
現在我們數組的所有四個單元格都包含季節的名稱。初始化也可以以不同的方式完成,結合初始化和聲明:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
此外,new運算子可以省略:
String[] seasons  = {"Winter", "Spring", "Summer", "Autumn"};

如何在Java中將數組顯示在螢幕上?

您可以在螢幕上(即控制台)顯示數組元素,例如使用for迴圈。另一種在螢幕上顯示數組的更短的方法將在下面的“使用數組的有用方法”段落中討論。現在,讓我們看一個數組循環輸出的範例:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
結果,程式將輸出以下結果:
冬天春天夏天秋天

一維和多維 Java 數組

如果我們想要建立的不是數字數組、字串數組或某些物件的數組,而是數組的數組怎麼辦?Java 允許您做到這一點。我們已經熟悉的陣列int[] myArray = new int[8]就是所謂的一維數組。數組的數組稱為二維的。它就像一個有行號和列號的表格。或者,如果您在矩陣上學習了線性代數的基礎。 Java 中的陣列 - 4為什麼需要這樣的陣列?特別是,用於對相同的矩陣和表以及結構相似的物件進行程式設計。例如,國際象棋的比賽場地可以指定為 8x8 陣列。多維數組的宣告和創建如下:
int[][] myTwoDimentionalArray = new int [8][8];
該數組中正好有 64 個元素:myTwoDimentionalArray[0][0]myTwoDimentionalArray[0][1]myTwoDimentionalArray[1][0]myTwoDimentionalArray[1][1]依此類推,直到myTwoDimentionalArray[7][7]。因此,如果我們用它來表示棋盤,那麼單元格 A1 將表示myTwoDimentionalArray[0][0],E2 將表示myTwoDimentionalArray[4][1]。有兩個的地方就有三個。在 Java 中,您可以指定數組的數組...數組的數組的數組,等等。確實,三維及更多維的數組很少被使用。但是,使用三維數組,您可以對魔術方塊等進行編程。

還有什麼可讀的

多維數組

處理數組的有用方法

為了在 Java 中使用數組,有一個java.util.Arrays類別(數組在英語中的意思是「數組」)。一般來說,陣列最常執行以下操作:填滿元素(初始化)、檢索元素(按數字)、排序和搜尋。搜尋和排序數組是一個單獨的主題。一方面,自己練習和編寫幾種搜尋和排序演算法非常有用。另一方面,所有最佳實踐都已編寫並包含在 Java 庫中,並且可以合法使用。 這是這個類別的三個有用的方法

對數組進行排序

此方法void sort(int[] myArray, int fromIndex, int toIndex)按升序對整數數組或其子數組進行排序。

在陣列中搜尋所需的元素

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key)此方法在已排序的myArray或子數組中搜尋關鍵元素,從fromIndex開始,到toIndex結束。如果找到該元素,則該方法會傳回其索引,如果沒有找到 - 。 (-fromIndex)-1

將數組轉換為字串

該方法String toString(int[] myArray)將數組轉換為字串。問題是在 Java 陣列中不要重寫toString()。這意味著,如果您嘗試直接將整個陣列(而不是逐個元素,例如「將陣列列印到螢幕」中)顯示到螢幕上 ( System.out.println(myArray)),您將獲得該陣列的類別名稱和十六進位雜湊碼(這是由Object.toString()定義的)。如果你是初學者,你可能不明白方法的解釋toString。在第一階段,這不是必要的,但使用此方法可以簡化陣列的輸出。Java 可以輕鬆地顯示數組,而無需使用循環。下面的範例將詳細介紹這一點。

有關 sort、binarySearch 和 toString 的範例

讓我們建立一個整數數組,使用toString將其顯示在螢幕上,使用sort方法對其進行排序,並在其中找到一些數字。
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; //declaring and initializing the array
        System.out.println(array);//trying to display our array on the screen without the toString method - we get a hexadecimal number
        System.out.println(Arrays.toString(array));//печатаем массив "правильно"
        Arrays.sort(array, 0, 4); // sort the entire array from zero to the fourth member
        System.out.println(Arrays.toString(array));//print the sorted array to the screen
        int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
        //binarySearch method will return the index of the sorted array element, in which the required number is "hidden"
        System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
        // and immediately display the result on the screen

    }
}
程式輸出:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
第一行是嘗試在不使用toString 的情況下顯示數組,第二行是使用toString顯示數組,第三行是排序數組,第四行是排序數組中所需數字5 的索引(請記住,我們從零,因此數組的第四個元素的索引為 3)。在第五行中,我們看到值-1。數組沒有這樣的索引。輸出表示所需元素(在本例中為 0)不在陣列中。

有關 Array 類別方法的更多信息

Arrays類別及其使用 -文章介紹Array類別的一些方法

關於數組的主要內容

  • 陣列的主要特徵:放入其中的資料類型、名稱和長度。
    後者在初始化(為數組分配記憶體)期間決定,前兩個參數在聲明數組時確定。

  • 數組大小(單元格數量)必須以int形式定義

  • 創建數組後就無法更改其長度。

  • 數組元素可以透過其索引來存取。

  • 在陣列中,與 Java 中的其他地方一樣,元素從零開始編號。

  • 數組創建過程完成後,將用預設值填充該數組。

  • Java 中數組的結構與 C++ 不同。它們與指向動態數組的指標幾乎相同。

有關數組的有用資料

想了解更多關於數組的知識嗎?請看看下面的文章。關於這個主題有很多有趣且有用的信息。
  1. Something About Arrays - 關於陣列的詳細文章

  2. Arrays類別及其使用 -文章介紹Array類別的一些方法

  3. 多維數組- 有關多維數組的詳細文章和範例。

  4. 傳回零長度數組,而不是 null - 《EffectiveProgramming》作者 Joshua Bloch 談論如何更好地返回空數組

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION