List 介面

      在〈List 介面〉中尚無留言

不可變動的 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取出(但不刪除)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *