不可變動的 List
最簡單的 List ,如下所示
public class Main {
public static void main(String[] args) {
List list=List.of(10,20,30,40,50);
System.out.println(list);
System.out.println(list.get(3));
}
}
結果:
[10, 20, 30, 40, 50]
40
List.of 是 Java 9 才開始提供的工廠方法,它建立的是一個不可修改(unmodifiable)的 List,不可新增,刪除,也不可修改裏面的內容。
System.out.println(list) 會調用 list 的 toString() 方法將裏的所有內容轉成字串再全部印出,不需要用 for 迴圈一個一個印。
ArrayList
ArrayList 為可變動的 List,如果要初始化 ArrayList,需使用 List.of (),如下所示。
public class Main {
public static void main(String[] args) {
List list=new ArrayList(List.of(10,20,30,40));
list.add(100);
list.add(0,0);
list.remove(2);
System.out.println(list);
}
}
ArrayList 為可變動的 List,所以可以使用 add, remove 等功能。
List 介面
最像陣列的集合,每個集合都有 index,除了可動態擴充長度外,其他都跟陣列一樣。
所有的 List 都是有順序性、無排序、可重複,可使用如下的方法新增、插入、刪除
add("Apple") //在最後新增資料
add(2,"Banana") //在索引2 插入新資料
get(index) //取得 index 索引的資料
remove(index) //移除 index 索引的資料
indexOf("Apple") //取得第一個 "Apple 的索引編號
ArrayList
最簡易使用的 List 就屬 ArrayList,使用 add 新增、get(index) 取出、remove(index) 刪除。ArrayList 底層其實是一個陣列,並不是雙向連結。當元素超出目前陣列容量時,ArrayList 會自動擴充容量(通常是原來容量的 1.5 倍到 2 倍),並複制資料到新的陣列中,在效能上其實還不錯。
非泛型ArrayList
🔒 完整內容請註冊並登入會員。
免費註冊登入非泛型會產生 Runtime error,且必需要強制轉型。泛型會產生 Compiler error,不需強制轉型。
初始化
new ArrayList<>() 是產生一個空的 List,如果要給定初始值,可以使用如下二種方式。
傳入 List.of()。List.of() 是不可變更的 List,但加上 new ArrayList 後,此 List 即可變更。
Listages=new ArrayList<>(List.of(10,20,30,40,50));
另也傳入 Array.asList()
Listages=new ArrayList<>(Arrays.asList(10,20,30,40,50));
LinkedList
LinkedList 採用雙向鏈結,所以在新增刪除的效能比 ArrayList 快很多,但走訪的效能比 ArrayList 差。LinkedList 比 ArrayList 多了一個 addLast,其功能同 add。
排序
如果要排序的資料是 Integer、String 等簡易的資料型態,可以使用 List 裏的 sort、Collection.sort 及 stream 的三種方式排序,如下代碼所示。
🔒 完整內容請註冊並登入會員。
免費註冊登入如果要排序的資料是自訂資料結構,也有如下二種方式。
🔒 完整內容請註冊並登入會員。
免費註冊登入Vector
Vector 是最原始的集合,特性同 ArrayList。但 Vector 是 Thread-safe,效能遠比 ArrayList 差,建議能不要用就不用。
Stack
繼承 Vector,具後進先出原則,使用 push 加入,pop 取出(並刪除),peek取出(但不刪除)。
