List.of() 與 Arrays.asList該如何選擇?
介紹:
Java 提供了幾種方便的方法來創(chuàng)建列表,包括 List.of() 和 Arrays.asList()。雖然這兩種方法都可以讓您輕松創(chuàng)建列表,但它們存在一些關鍵差異。在本文中,我們將探討 Java 中 List.of() 和 Arrays.asList() 之間的差異,重點介紹它們不同的行為、用例和含義。最后,您將清楚地了解何時使用每種方法以及它們之間有何不同。
List.of():
List.of() 是 Java 9 中引入的工廠方法,用于創(chuàng)建包含指定元素的不可變列表。以下是一些需要注意的要點:
- 不可變性:結果列表是不可變的,這意味著它的大小和元素在創(chuàng)建后不能修改。
- 固定大小:List.of()創(chuàng)建的列表具有固定大小,不支持添加或刪除元素。
- 空值:List.of() 不允許空元素。如果嘗試包含 null,則會拋出 NullPointerException。
- 例子:
List<String> immutable_list = List.of( "蘋果" , "香蕉" , "橙子" );
Arrays.asList():
Arrays.asList() 是自 Java 早期版本以來就可用的方法,它提供了一種創(chuàng)建由指定數組支持的固定大小列表的便捷方法。我們來看看它的特點:
- 可修改性:Arrays.asList() 生成的列表是可修改的,允許您僅更新其元素而不是其結構。
- 由數組支持:列表由原始數組支持,因此對列表元素的任何更改都會影響底層數組,反之亦然。
- 固定大小限制:雖然可以修改,但 Arrays.asList() 返回的列表的大小是固定的,防止結構修改,例如添加或刪除元素。
- 空值:與List.of()不同,Arrays.asList()允許空元素。
- 例子:
List<String> mutable_list = Arrays.asList("red", "green", "blue");
用例:
現(xiàn)在我們了解了 List.of() 和 Arrays.asList() 之間的區(qū)別,讓我們探討一下它們各自的用例:
列表():
當您需要具有固定元素集的不可變列表時,此方法是理想的選擇。它確保數據完整性并防止意外修改。
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() 用于創(chuàng)建不可變的顏色列表。任何通過添加或刪除元素來修改列表的嘗試都將導致拋出異常。該示例還演示了如何訪問列表中的元素。
Arrays.asList():
當您想要由指定數組支持的固定大?。尚蛄谢┝斜頃r,請使用此方法。對返回列表的任何更改也將寫入原始數組。
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
}
}
結論:
了解 List.of() 和 Arrays.asList() 之間的差異對于 Java 開發(fā)人員至關重要。List.of() 創(chuàng)建一個具有固定大小的不可變列表,而 Arrays.asList() 則生成一個由數組支持的可修改列表。通過考慮每種方法的特征、用例和含義,您可以在為您的特定編程需求選擇適當的工廠方法時做出明智的決策。