ArrayList是Java Collection Framework中實作List介面的類別。它是一個線性結構,順序儲存和存取每個元素,這是因為它內部使用動態陣列來儲存其元素。與數組一樣,它也允許儲存重複元素。這裡的動態數組是指能夠根據需要增長和收縮的數組。在本文中,我們將探討 ArrayList 的內部運作原理,以展示它如何儲存其元素並在操作期間調整自身大小。
我們大多數人都知道標準陣列是固定長度的。一旦數組被聲明並初始化,它們就不能增長或收縮,這意味著我們在指定其大小後不能添加更多元素。但是,在一些極端情況下,開發人員可能直到運行時才知道所需的陣列大小。在這種情況下,ArrayList 是陣列的更好替代方案,它可以動態增加或減少元素的數量。
要在我們的程式中使用ArrayList,我們首先需要建立ArrayList類別的實例。為此,Java 提供了以下提到的三種不同的構造函數:
ArrayList():它將建立一個空的ArrayList。
ArrayList(intcapacityInitial):在此建構函式中,我們可以傳遞 ArrayList 可容納的元素數量的初始容量。一旦元素數量達到初始容量,該容量就會自動增加。
ArrayList(Collection collectionName):我們也可以使用此建構子從另一個集合建立 ArrayList。
當我們使用內建方法「add()」為 ArrayList 新增元素時,它首先檢查陣列中是否有足夠的空間來儲存新元素。如果存在,它將新元素分配給數組中的下一個可用索引。如果沒有足夠的空間容納新元素,它會建立一個容量更大的新數組,通常是當前容量的1.5 倍,然後將舊數組中的所有現有元素複製到新數組,並將新元素分配給下一個元素新建立的陣列中的可用索引。
當我們使用內建方法「remove()」從 ArrayList 中刪除一個元素時,它會將刪除的元素之後的所有元素向左移動一個索引。但是,它不會立即收縮數組,但如果大小與容量相比太小,它可能會在稍後收縮。
讓我們討論幾個例子,以便更好地理解上面討論的要點。
以下範例說明如何在 Java 中建立和列印 ArrayList 的元素。
import java.util.*; public class Example1 { public static void main(String[] args) { // Creating arraylist ArrayList<Integer> araylist = new ArrayList<Integer>(); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// Adding elements in arraylist<span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(8); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(5); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(2); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(9); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(2); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(4); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(9); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(7); <span style="font-size: 11.4844px;"> </span>System.out.println("List of elements: " + araylist); } }
List of elements: [8, 5, 2, 9, 2, 4, 9, 7]
在下面的範例中,我們將建立一個具有初始容量的ArrayList,並嘗試新增超過指定容量的元素,以顯示ArrayList可以動態成長。
import java.util.*; public class Example2 { public static void main(String[] args) { // Creating arraylist with initial capacity of 5 <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>ArrayList<Integer> araylist = new ArrayList<Integer>(5); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// Adding elements in arraylist <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(80); // 1 <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(15); // 2 <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(23); // 3 <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(9); // 4 <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(12); // 5 <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// adding more elements <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(14); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(91); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>araylist.add(74); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>System.out.println("List of elements: " + araylist); } }
List of elements: [80, 15, 23, 9, 12, 14, 91, 74]
在此範例中,我們將從 HashSet 建立一個 ArrayList,以示範可以將一個集合的元素新增至 ArrayList。在內部,它首先檢查傳遞的集合的大小,然後使用「Arrays.copyOf()」方法將元素儲存在給定的 ArrayList 中。
import java.util.*; public class Example3 { public static void main(String[] args) { <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// Creating a Set <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>HashSet<Integer> setH = new HashSet<>(); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// Adding elements in the Set <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(80); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(15); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(23); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(9); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(12); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(14);<span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(91); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>setH.add(74); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// Passing the Set to the ArrayList <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>ArrayList<Integer> araylist = new ArrayList<>(setH); <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>// printing the result <span style="font-size: 0.875em; font-weight: var(--bs-body-font-weight);"> </span>System.out.println("List of elements: " + araylist); } }
List of elements: [80, 23, 9, 74, 91, 12, 14, 15]
我們透過定義 ArrayList 開始本文,在下一節中,我們討論了它的內部運作原理。 ArrayList 是一個可調整大小的陣列,其預設容量為 10,當我們在其中添加更多元素時,可以增加該容量。我們也可以在建立 ArrayList 時在其建構函式中指定初始容量。
以上是ArrayList在Java中的內部運作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!