List.of() VS Arrays.asList()

帶你聊技術發表於2023-10-18

來源:waynblog

簡介

Java 提供了幾種用於建立列表的方便方法,包括 List.ofArrays.aslist。儘管這兩種方法都可以很簡單的建立集合物件,但它們實際上是有一些顯著差異的。本文將介紹 Java 中的 List.of()Arrays.aslist() 之間的差異,並講解它們的應用場景。最後,我們將清楚地瞭解何時使用哪方法以及它們之間有何不同。

List.of()

List.of() 是 Java 9 中引入的工廠方法,用於建立包含指定元素的不可變列表。以下是一些需要注意的要點:

  • 不可變性:List.of() 建立的集合是不可變的,這意味著它的大小和元素在建立後不能修改。
  • 固定大小:建立的集合具有固定大小,不支援新增或刪除元素。
  • 空值:建立的集合中不允許存放空元素。如果嘗試新增 null,則會丟擲 NullPointerException

舉例:

List<String> immutable_list = List.of("apple""banana""orange");

Arrays.asList()

Arrays.asList() 是自 Java 早期版本以來就可用的方法,它提供了一種建立由指定陣列支援的固定大小列表的便捷方法。我們來看看它的特點:

  • 可修改性:Arrays.asList() 建立的集合是可修改的,允許僅更新其元素而不能新增元素。
  • 由陣列支援:集合由原始陣列支援,因此對列表元素的任何更改都會影響底層陣列,反之亦然。
  • 固定大小限制:Arrays.asList() 建立的集合的大小是固定的。為了防止集合被修改,新增或刪除元素時會丟擲 UnsupportedOperationException 異常。
  • 空值:與 List.of() 不同,Arrays.asList() 允許新增空元素。

舉例:

List<String> mutable_list = Arrays.asList("red""green""blue");

應用場景

現在讓我們瞭解 List.of()Arrays.asList() 的應用場景:

List.of()

當我們需要具有固定元素個數的不可變集合時,此方法是理想的選擇。它會確保集合的完整性並防止意外修改。

import java.util.List;

public class ListOfExample {
    public static void main(String[] args) {
        String[] colorsArray = { "Red""Green""Blue" };
        List<String> colors = List.of(colorsArray);

        colorsArray[0] = "Yellow";

        // Accessing elements in the original array
        System.out.println(colors.get(0).equals(colorsArray[0])); // Output: false
        System.out.println(colors.get(1).equals(colorsArray[1])); // Output: true
        System.out.println(colors.get(2).equals(colorsArray[2])); // Output: true
    }
}

在上面的示例中,List.of() 用於建立不可變的顏色列表。任何透過新增或刪除元素來修改列表的嘗試都將導致丟擲異常。

Arrays.asList()

當我們想要由指定陣列支援的固定大小(可序列化)集合時,請使用此方法。對返回集合的任何更改也將寫入原始陣列。

import java.util.Arrays;
import java.util.List;

public class ArraysAsListExample {
    public static void main(String[] args) {
        String[] colorsArray = {"Red""Green""Blue"};
        List<String> colors = Arrays.asList(colorsArray);

        // Modifying the list (and array)
        colors.set(0"Yellow");

        // Accessing elements in the original array
        System.out.println(colors.get(0).equals(colorsArray[0])); // Output: true
        System.out.println(colors.get(1).equals(colorsArray[1])); // Output: true
        System.out.println(colors.get(2).equals(colorsArray[2])); // Output: true
    }
}

本文翻譯自國外論壇 medium,原文地址:

總結

瞭解 List.of()Arrays.asList() 之間的區別對於 Java 開發人員至關重要。List.of() 建立具有固定大小的不可變集合,而 Arrays.asList() 生成的是由陣列支援的可修改集合。透過考慮這兩種方法的特點以及應用場景,我們可以在特定的程式設計需求場景選擇適當的方法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2989503/,如需轉載,請註明出處,否則將追究法律責任。

相關文章