1.ArrayList

今天我們將探索這個ArrayList類。這是稱為集合的幾個類中的第一個。在 Java 中,集合是一個廣泛而有用的主題,以至於整個 CodeGym 任務都專門針對它們。

要完全理解集合的結構及其所有細微差別,您需要首先學習 OOP、接口、繼承、多線程基礎知識等等。

所以今天我們將熟悉最簡單的集合。但是在足夠深的層次上,您可以了解如何使用它以及它是如何工作的。現在,見見ArrayList收藏

背景故事

我將從一些背景開始。程序員真的不喜歡數組的一個方面:它們的大小不能改變這一事實。如果你需要在數組中存儲三個以上的元素,但只有一個空單元格怎麼辦?

解決數組空間限制的唯一方法是創建一個非常大的數組,以容納您可能需要存儲的所有元素。但這通常是在浪費內存。如果一個數組通常包含兩個或三個元素,但即使有很小的機會需要存儲 100 個元素,那麼就有必要創建一個容量可存儲 100 個的數組。

那麼程序員想出了什麼呢?他們寫了這個ArrayList類,它做與類相同的工作Array,但可以調整大小。

數組列表類

類名ArrayList由兩個詞組成:Array + List。Array是一個數組,List是一個列表。

每個ArrayList對像都包含一個普通的元素數組。當您從 中讀取元素時ArrayList,該對象會從其內部數組中檢索它們。當您寫入元素時,它會將它們寫入內部數組。

ArrayList 類沒有數組的所有缺點。它知道如何:

  • 存儲特定類型的元素
  • 動態調整列表大小
  • 將元素添加到列表的末尾
  • 在列表的開頭或中間插入元素
  • 從列表中的任何位置刪除元素

有關更多詳細信息,請參見下文:


2.創建ArrayList對象

要創建一個ArrayList對象,您需要編寫如下代碼:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

其中ArrayList是集合類型/類,TypeParameter是集合中存儲的元素的類型ArrayListname是變量的名稱ArrayList<TypeParameter>

name變量具有通用類型。它由兩種類型組成:首先表示集合的類型,然後用尖括號表示集合中存儲的元素的類型。

例子:

代碼 描述
ArrayList<Integer> list = new ArrayList<Integer>();
整數列表
ArrayList<String> list = new ArrayList<String>();
字符串列表
ArrayList<Double> list = new ArrayList<Double>();
實數列表

與數組不同,集合不能存儲原始類型,只能存儲引用類型。因此,如果您需要 s 的集合int,請改用Integer包裝類。


3.操作ArrayList

最初,新創建的列表的長度為零,因為它包含 0 個元素。如果向列表中添加一個元素,則其長度會增加 1。如果刪除添加的元素,則長度會減回零。

下表可以教你更多關於類的方法ArrayList

方法 描述
void add(Type value)
將傳遞的元素添加到列表中
void add(int index, Type value)
將元素添加到列表中的特定位置。
Type get(int index)
返回索引為的元素index
void set(int index, Type value)
分配value給索引為的元素index
Type remove(int index)
移除索引為 的元素index。返回刪除的元素。
Type remove(Type value)
刪除傳遞給方法的元素。如果有多個這樣的元素,第一個將被刪除。
void clear()
清除列表,即從列表中刪除所有元素。
boolean contains(Type value)
檢查列表是否包含value.
boolean isEmpty()
檢查列表是否為空。換句話說,列表的長度是否為零。
int size()
返回列表的大小,即列表中元素的數量。
Type[] toArray(Type[] array)
返回包含列表元素的數組。
您需要將數組傳遞給方法。

這些方法幾乎可以讓您對列表做任何您想做的事情:交換元素、添加元素和刪除元素。您可以使用單個命令清除列表,甚至可以將列表轉換為數組。



ArrayList4.和的比較Array

我不認為我們可以避免比較ArrayList和數組。

您只能對數組執行 4 個操作:

  • 創建數組
  • 通過索引獲取元素
  • 通過索引設置元素
  • 獲取數組的長度

以下是應用於數組和 的這些操作ArrayList

大批 數組列表
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

讓我們比較一下 anArrayList和 array 的工作方式。比如我們來實現這個任務:“從鍵盤讀取10個字符串,並以倒序顯示在屏幕上”

使用數組 使用數組列表
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

這個比喻很清楚。對於數組,一切都以某種方式更短更清晰。但ArrayList也不難:要獲取一個元素,我們使用get()方法;改變一個元素,set()方法;獲取列表的長度,size()方法。

那麼為什麼程序員要使用ArrayList類呢?

當然,重點是普通數組沒有的所有其他方法:

  • 向列表中添加一個元素
  • 在列表中間添加一個元素
  • 在列表中查找一個元素
  • 從列表中刪除元素