Lazy loaded image
技術分享
Java List初始化ArrayList
字数 716阅读时长≈ 2 分钟
2024-6-22
2025-6-17
11
 
Java的ArrayList是一種動態陣列,也就是說,它的大小是可以改變的。它繼承了Java的AbstractList類別,並實現了List介面。ArrayList可以存儲任何類型的資料,並且可以動態地增加和減少其大小。
初始化ArrayList可以有以下幾種方法:

使用add()

java

import java.util.*; public class Main { public static void main (String[]args) { System.out.println ("Hello World"); //1. Initialization with add() List < String > list1 = new ArrayList (); list1.add ("Alan"); list1.add ("Bill"); list1.add ("Mary"); System.out.println ("list1=" + list1); //2. Double Brace Initialization List < String > list2 = new ArrayList () { { add ("Alan"); add ("Bill"); add ("Mary"); }}; System.out.println ("list1=" + list2); } }
Java
 

雙括號初始化(Double Brace Initialization)

 

java

import java.util.*; public class Main { public static void main(String[] args) { System.out.println("list1="+list1); //2. Double Brace Initialization List<String> list2 = new ArrayList(){{ add("Alan"); add("Bill"); add("Mary"); }}; System.out.println("list2="+list2); } }
Java
這段代碼的實際效果是創建了一個匿名內部類(Anonymous Inner Class)繼承自ArrayList<String>,並且在這個匿名內部類的實例初始化塊(Instance Initializer Block)中添加了幾個元素。
  • 內部類與實例初始化塊
    • 外層大括號{}定義了一個匿名內部類,它繼承自ArrayList<String>
    • 內層大括號{}是一個實例初始化塊。這個初始化塊會在類實例化時執行,這裡面包含了對ArrayList的幾次add操作,用於向集合中添加元素。
優點
缺點
這種寫法能夠在一行中完成集合的宣告與初始化,並且能夠立即對集合進行操作,相對簡潔。
這種寫法會創建一個匿名內部類,增加了記憶體消耗,並且在使用反序列化時可能會引發問題。因此,不推薦在性能關鍵的代碼中使用。

使用asList()

 

java

import java.util.*; public class Main { public static void main (String[]args) { //3. Initialization using asList() List<String> list3 = new ArrayList( Arrays.asList("Alan","Bill","Mary") ); System.out.println ("list3=" + list3); } }
Java
  1. 初始化
      • Arrays.asList("Alan", "Bill", "Mary"):這行代碼創建了一個由Arrays.asList方法返回的固定大小的列表(List),該列表包含了給定的元素。
      • new ArrayList<>(...):這行代碼將固定大小的列表轉換為一個可變大小的ArrayList
  1. Arrays.asList() 方法
      • Arrays.asList()方法返回一個基於指定數組的固定大小的列表。這個列表本質上是數組的視圖,因此它不支持添加或移除元素的操作。
  1. 轉換為ArrayList
      • 由於我們需要一個可變大小的列表,我們將Arrays.asList()返回的列表傳遞給ArrayList的構造函數,創建了一個新的ArrayList實例,該實例是可變的。
優點
缺點
1. 簡潔:使用Arrays.asList()進行初始化非常簡潔,能夠在一行代碼中完成集合的初始化。 2. 可讀性高:這種方法易於閱讀和理解,適合用於初始化小型集合。 3. 性能:相比於雙括號初始化,這種方法不會創建匿名內部類,因此在內存開銷和性能方面更優。
1. 固定大小的問題Arrays.asList()返回的列表是固定大小的,不能直接添加或移除元素。因此,我們需要將其轉換為可變大小的ArrayList,這可能會帶來一些額外的內存開銷。 2. 靈活性:相比於使用標準的集合初始化方法,這種方法在初始化包含更複雜邏輯的集合時可能不夠靈活。
總結
使用Arrays.asList()來初始化ArrayList是一種簡潔且高效的方式,特別適合用於初始化元素數量較少且不需要額外初始化邏輯的集合。相較於雙括號初始化,這種方法在性能和內存使用方面有一定優勢,但需要注意轉換成ArrayList以確保集合的可變性。
 
 

參考

上一篇
Java Method Reference
下一篇
美股ETF BOXX介紹-短期存放閒置資金的選擇

评论
Loading...