JavaRush /Java Blog /Random-TW /關於Java中的陣列的一些事情

關於Java中的陣列的一些事情

在 Random-TW 群組發布
你好!以前,在訓練期間,我們使用單一物件(或原始類型)。但是,如果我們需要處理的不是一個對象,而是整個群組呢?例如,我們想要建立公司所有員工的生日清單。例如,它應包含 30 行,格式為:“Andrey Petrov,1 月 25 日。” 一個特殊的資料結構,即數組,將在這方面為我們提供幫助。如果將陣列與現實生活中的物體進行比較,它的結構與帶有單元的銀行金庫非常相似: 關於 Java 中數組的一些知識 - 1陣列也由單元組成。您可以在每個單元格中放置一些東西。在這種情況下,要存取內容,您需要知道手機號碼。數組是這樣創建的:
public class Main {

   public static void main(String[] args) {

       String [] birthdays = new String[10]; // array of Java strings

   }
}
這裡我們建立了一個包含 10 個單元格的陣列。 您可以立即關注該陣列的一些功能:
  1. 它儲存嚴格定義類型的資料。如果我們最初創建了一個字串數組String,我們將無法在其中儲存任何其他內容。資料類型在建立數組時指定。這就是它與保險箱的區別,客戶可以在保險箱中存放他想要的任何東西。
  2. 陣列可以儲存基本類型(例如int)、字串(String)或同一類別的物件的資料。更準確地說,甚至不是物件本身,而是這些物件的連結。
  3. 數組的大小必須在建立時指定。創建後您將無法稍後指定它或調整它的大小。
[]Java 表示透過在表達式兩側使用方括號來建立陣列。它們可以在引用變數的名稱之前或之後指定 - 無論哪種方式都可以:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
如果要將某些內容寫入數組,則需要指定要寫入該值的儲存格的編號。陣列單元編號從 0 開始。從零開始是程式設計的常見做法。你越快習慣它就越好:) 關於 Java 中數組的一些知識 - 2也就是說,如果你想在數組的第一個單元格中放入一些值,可以像這樣完成:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
   }
}
現在,陣列的第一個儲存格包含同事的生日,其中包含一個包含 Lena 生日的字串。以此類推,可以添加其他值:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";
   }
}
請注意:我們將 Olesya 的生日添加到第八個單元格中(您是否忘記了為什麼 7 號單元格是第八個單元格?)。儘管所有其他單元格均未填充。沒有必要將值按順序寫入數組 - 沒有這樣的限制。另一方面,如果按順序寫入,則可以更輕鬆地追蹤空閒和占用單元的數量,並且數組中不會留下「洞」。如果您想取得數組儲存格的內容(如銀行儲存格的情況),您需要知道它的編號。這是這樣完成的:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       String olesyaBirthday = birthdays[7];
       System.out.println(olesyaBirthday);
   }
}
控制台輸出:

Олеся Остапенко, 3 января
我們創建了一個變數String並告訴編譯器:“在數組中查找索引為 7 的單元格birthdays,並將存儲在那裡的值賦給變數String olesyaBirthday。” 他正是這麼做的。

Java數組長度

使用陣列時,您可以使用特殊屬性 - 輕鬆找出其長度length
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[7] = "Olesya Ostapenko, January 3";

       int birthdaysLength = birthdays.length;
       System.out.println(birthdaysLength);
   }
}
控制台輸出:

10
筆記:此屬性length儲存數組的大小,而不是填充單元格的數量。我們的陣列只儲存3個值,但是當我們建立它時,我們為其指定了size = 10。這就是該欄位傳回的值length。為什麼這可能有用?舉例來說,如果您想將所有生日的清單列印到控制台(以檢查沒有人被遺忘),您可以透過一個簡單的循環來完成此操作:
public class Main {

   public static void main(String[] args) {

       String birthdays [] = new String[10];
       birthdays[0] = "Lena Eliseeva, March 12";
       birthdays[1] = "Kolya Romanov, May 18";
       birthdays[2] = "Vika Ignatova, July 12";
       birthdays[3] = "Denis Kozlov, September 7";
       birthdays[4] = "Maxim Maslennikov, November 9";
       birthdays[5] = "Roman Baranov, August 14";
       birthdays[6] = "Valery Pyatkina, April 1";
       birthdays[7] = "Olesya Ostapenko, January 3";
       birthdays[8] = "Kostya Gurko, October 19";
       birthdays[9] = "Seryozha Naumov, May 3";

       for (int i = 0; i < birthdays.length; i++) {
           System.out.println(birthdays[i]);
       }
   }
}
在迴圈中,我們建立一個i最初等於零的變數。在每次傳遞中,我們從數組中取出索引為 i 的單元格並將其值列印到控制台。循環將進行 10 次迭代,i 的值將從 0 增加到 9 - 恰好根據數組單元格的索引!這樣我們就會把從birthdays[0]到 的所有值印到控制台birthdays[9] 。事實上,建立陣列的方法有很多不同。int例如,可以像這樣建立 一個數字數組:
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
   }
}
這種方法稱為「快速初始化」。這非常方便,因為我們可以立即建立一個陣列並用值填充它。無需明確指定數組的大小 - 此欄位length將在快速初始化期間自動填入。
public class Main {

   public static void main(String[] args) {
       int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
       System.out.println(numbers.length);
   }
}
控制台輸出:

9

Java 物件數組

您已經聽說過物件數組和基元數組在記憶體中的儲存方式不同。我們以一個包含三個物件的陣列為例Cat
public class Cat {

   private String name;

   public Cat(String name) {
       this.name = name;
   }

   public static void main(String[] args) {

       Cat[] cats = new Cat[3];
       cats[0] = new Cat("Thomas");
       cats[1] = new Cat("Hippopotamus");
       cats[2] = new Cat("Philip Markovich");
   }
}
這裡有幾點要理解:
  1. 就原語而言,Java 陣列會儲存許多特定值(例如數字int)。對於對象,數組儲存許多引用。此數組cats由三個單元組成,每個單元都包含對物件的參考Cat。每個連結都指向記憶體中儲存該物件的位址。
  2. 數組元素儲存在記憶體中的單一區塊中。這樣做是為了更有效、更快速地存取它們。因此,連結cats指向記憶體中的一個區塊,其中儲存了所有物件(數組的元素)。A cats[0]- 到該區塊內的特定位址。
關於 Java 中數組的一些知識 - 3重要的是要理解數組不僅可以儲存對象,它本身也是一個對象。

數組的數組或二維數組

基於此,我們面臨一個問題——例如,我們是否可以創建一個數組數組,而不是字串或數字數組?答案是──是的,我們可以!數組可以儲存其中的任何對象,包括其他數組。這樣的數組稱為二維數組。如果你用圖片來描繪它,它看起來和普通的桌子非常相似。例如,我們想要建立一個陣列來儲存 3 個數字數組,int每個數組有 10 個單元格。它看起來像這樣: 關於 Java 中數組的一些知識 - 4每行代表一個數字數組int。第一個陣列包含從 1 到 10 的數字,第二個陣列包含從 -1 到 -10 的數字,第三個陣列包含一組隨機數。每個數組都儲存在二維數組的一個單元中。在程式碼中初始化二維數組如下所示:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
}
我們的二維 cats 數組儲存 3 個數組,每個數組有 5 個單元格。如果我們想將物件放入第二個陣列的第三個儲存格中,我們可以這樣做:
public static void main(String[] args) {
   Cat[][] cats = new Cat[3][5];
   cats[1][2] = new Cat("Fluff");
}
[1]指向第二個數組,並[2]指向該數組的第三個單元格。由於二維數組由多個數組組成,為了遍歷它並將所有值列印到控制台(或填充所有單元格),我們需要一個雙重嵌套循環:
for (int i = 0; i < cats.length; i++) {
   for (int j = 0; j < cats[i].length; j++) {
       System.out.println(cats[i][j]);
   }
}
在外層循環(variable i)中,我們輪流遍歷構成二維數組的所有數組。在內部循環(變數j)中,我們迭代每個數組的所有單元格。結果,物件cats[0][0](第一個數組,第一個單元格)將首先顯示在控制台上,第二個物件將是cats[0][1](第一個數組,第二個單元格)。當第一個陣列耗盡時,將輸出、 cats[1][0]cats[1][1]等等。cats[1][2]順便說一句,快速初始化也適用於二維數組:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
通常,我們會將二維數組寫numbersint[3][3],但此方法允許我們立即指定值。為什麼需要二維數組?舉例來說,在它的幫助下,您可以輕鬆地重新創建著名的遊戲“戰艦”: 關於 Java 中數組的一些知識 - 5“戰艦”中的比賽場地結構可以輕鬆描述:一個由10 個數組組成的二維數組,每個數組有10 個單元格。您為自己和對手創建兩個這樣的陣列:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*你在你的船隻所在的單元格中 填寫一些值(例如數字或符號),然後你和你的對手輪流調用單元格編號:
  • 海戰[6][5]!
  • 過去的!海戰2[6][6]!
  • 受傷了!
  • 海戰2[6][7]!
  • 受傷了!
  • 海戰2[6][8]!,
  • 被殺了!

有關數組的其他資源

想了解更多關於數組的知識嗎?請看看下面的文章。關於這個主題有很多有趣且有用的信息。
  1. Java 中的陣列- 一篇有關陣列、陣列的建立、初始化和使用的詳細文章。並舉例說明。
  2. Arrays類別及其使用 -文章介紹了該類別的一些方法Array
  3. 數組是第一個專門討論數組的 JavaRush 講座。
  4. 多維數組- 有關多維數組的詳細文章和範例。
  5. 返回零長度數組,而不是 null - 《高效編程》作者 Joshua Bloch 談論如何更好地返回空數組。
我們對陣列的第一次認識到此結束,但這只是與陣列互動的開始。在接下來的講座中,我們將看到使用它們的有趣方法,並了解 Java 有哪些內建函數可以更方便地使用這種資料結構:)
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION