欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?9中List.of()的使用示例及注意事項(xiàng)

 更新時(shí)間:2025年03月31日 10:48:35   作者:Anpunph.  
Java 9引入了一個(gè)新的靜態(tài)工廠方法List.of(),用于創(chuàng)建不可變的列表對(duì)象,這篇文章主要介紹了Java?9中List.of()的使用示例及注意事項(xiàng)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

List.of() 是 Java 9 引入的一個(gè)靜態(tài)方法,用于創(chuàng)建不可變的列表(ImmutableList)。這意味著一旦使用 List.of() 創(chuàng)建了列表,你就不能向其中添加、刪除或修改元素。這個(gè)方法提供了一種方便的方式來創(chuàng)建包含零個(gè)或多個(gè)元素的不可變列表。

List.of() 方法有幾個(gè)重載版本,允許你傳遞零個(gè)到十個(gè)元素作為參數(shù)。如果你需要?jiǎng)?chuàng)建包含超過十個(gè)元素的列表,你可以使用 List.of() 方法來組合較小的列表,或者使用其他集合構(gòu)造方法(如 Arrays.asList() 后跟 Collections.unmodifiableList(),盡管這不是一個(gè)純粹的不可變列表,因?yàn)樗匀豢梢酝ㄟ^原始數(shù)組進(jìn)行修改)。

基本用法

// 創(chuàng)建一個(gè)空的不可變列表  
List<String> emptyList = List.of();  
  
// 創(chuàng)建一個(gè)包含單個(gè)元素的不可變列表  
List<Integer> singleElementList = List.of(1);  
  
// 創(chuàng)建一個(gè)包含多個(gè)元素的不可變列表  
List<String> multipleElementsList = List.of("apple", "banana", "cherry");

注意事項(xiàng)

  • 不可變性:一旦創(chuàng)建,列表的內(nèi)容就不能更改。嘗試添加、刪除或修改元素將導(dǎo)致 UnsupportedOperationException。

  • 性能:由于不可變性,List.of() 創(chuàng)建的列表在性能上可能不是最優(yōu)的,特別是在進(jìn)行大量修改操作時(shí)。然而,對(duì)于需要不可變集合的場(chǎng)景,這種方法提供了簡(jiǎn)潔性和安全性。

  • 類型安全:由于 List.of() 是一個(gè)泛型方法,它可以確保列表的類型安全。

  • 使用場(chǎng)景List.of() 非常適用于創(chuàng)建常量列表、配置列表或作為方法參數(shù)傳遞的不可變列表。

  • 元素限制:直接通過 List.of() 方法最多可以傳遞十個(gè)元素。如果需要更多元素,請(qǐng)考慮使用其他集合構(gòu)造方法或組合多個(gè) List.of() 調(diào)用。

示例:組合多個(gè) List.of() 調(diào)用

// 創(chuàng)建兩個(gè)較小的不可變列表  
List<Integer> firstHalf = List.of(1, 2, 3, 4);  
List<Integer> secondHalf = List.of(5, 6, 7, 8, 9, 10);  
  
// 使用 Stream 將它們組合成一個(gè)較大的不可變列表  
List<Integer> combinedList = Stream.concat(firstHalf.stream(), secondHalf.stream())  
    .collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));  
  
// 注意:上面的 combinedList 實(shí)際上不是純粹的 List.of() 創(chuàng)建的不可變列表,  
// 但它通過使用 Collections.unmodifiableList() 達(dá)到了類似的效果。  
  
// 更簡(jiǎn)潔但非純不可變的方法(如果不需要完全的不可變性)  
List<Integer> simplerCombinedList = new ArrayList<>(firstHalf);  
simplerCombinedList.addAll(secondHalf);  
// 注意:simplerCombinedList 是可變的

上面的 simplerCombinedList 示例是可變的,而 combinedList 示例則通過 Collections.unmodifiableList() 嘗試創(chuàng)建一個(gè)不可變列表,但它不是由 List.of() 直接創(chuàng)建的。對(duì)于完全由 List.of() 創(chuàng)建的不可變列表,你應(yīng)該直接傳遞元素給 List.of(),或者如果元素?cái)?shù)量超過限制,則考慮使用其他設(shè)計(jì)。

附:List.of() 和 Array.asList() 的區(qū)別

List.of()和 Array.asList()都是 Java 中用于創(chuàng)建列表的兩種不同方法,它們都可以用來創(chuàng)建列表。但它們也有一些顯著的區(qū)別,下面筆者將講解下它們的主要區(qū)別

1. 不可變性和可變性

List.of()

  • 創(chuàng)建出來的列表是不可變的
  • 此列表一旦創(chuàng)建,列表中的元素就不能被修改(添加、刪除或更改元素)
  • 當(dāng)我們嘗試修改此方法構(gòu)造出來的列表時(shí),會(huì)報(bào)錯(cuò)UnsupportedOperationException

Arrays.asList()

  • 創(chuàng)建的列表是基于原始數(shù)組的固定大小的列表(fixed-size)
  • 列表的大小是固定的,不能添加或刪除元素
  • 但是,列表中的元素是可變的,可以修改元素
  • 底層數(shù)組的內(nèi)容可以被間接修改,例如,如果列表包含的是可變對(duì)象(如ArrayList或自定義對(duì)象),那么這些對(duì)象的內(nèi)部狀態(tài)可以被更改

2. 性能對(duì)比

List.of()

  • 針對(duì)少量元素進(jìn)行了優(yōu)化,通常更適合創(chuàng)建固定且不可變的少量元素列表
  • 內(nèi)部實(shí)現(xiàn)可能根據(jù)元素?cái)?shù)量不同而有所不同(例如,針對(duì)單個(gè)元素、兩個(gè)元素等使用專門的類)

Arrays.asList()

  • 基于現(xiàn)有的數(shù)組實(shí)現(xiàn),因此性能開銷較低,特別是在處理大量元素時(shí)
  • 但是,由于它是固定大小的,如果需要?jiǎng)討B(tài)調(diào)整列表大小,性能可能不如ArrayList

3. 適用場(chǎng)景

List.of()

  • 適用于需要不可變列表的場(chǎng)景。例如作為常量、配置數(shù)據(jù)或任何不希望被修改的數(shù)據(jù)集合

Arrays.asList()

  • 適用于需要將現(xiàn)有數(shù)組轉(zhuǎn)換為列表的場(chǎng)景,或者當(dāng)你知道列表大小不會(huì)改變但需要列表功能(如迭代、索引訪問)時(shí)

總結(jié)

到此這篇關(guān)于Java 9中List.of()的使用示例及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)Java9 List.of()的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論