在這一系列帖子中,我正在比較編寫相同功能的不同方法。上一篇文章比較了 Collections.singletonList 和 ArrayList 建立單元素清單的方法。
在這篇文章中,我將比較 Collections.singletonList 與另一個著名的工廠方法 List.of。
集合::singletonList
方法簽名
公用靜態
public static void main(String[] args) { final var addresses = Collections.singletonList( new Address( "742 Evergreen Terrace", "Springfield", "New York", "13468", "US" )); System.out.println(addresses); }
描述
此方法傳回一個僅包含指定物件的不可變清單。它是在 Java 1.3 中引入的。上一篇文章介紹了相對 ArrayList 的優點,但回顧一下:
- 內嵌實作: 在一行中使用所需的元素進行初始化。
- 不變性:清單的大小和單一元素的內容不能更改。
- 記憶體分配: SingletonList 類別僅包含單一元素的一個欄位。
- CPU 使用率: SingletonList 建構子接受單一元素作為參數,不需要調整大小或陣列運算。
列表::的
方法簽名
靜態
public static void main(String[] args) { final var addresses2 = List.of( new Address( "1007 Mountain Drive", "Bristol Township", "New Jersey", null, "US" )); System.out.println(addresses2); }
描述
List.of(E e) 方法也是一個傳回不可修改清單的工廠方法。與僅支援一個元素的 Collections.singletonList(E e) 不同,List.of 支援 0 到 10 個元素,以及具有多個元素的陣列。它在 Java 9 中引入,距離 singletonList 17 年。
有趣的是,與 SingletonList 不同,它有註解:
傳回一個不可變列表僅包含指定的物件。
Array.of 聲明它是一個 不可修改的清單:
傳回包含一個元素的不可修改清單。
這反映了對集合不變性的新理解。根據此文件:
如果元素無法新增、刪除或替換,則集合被視為不可修改。但是,只有當集合中包含的元素不可變時,不可修改的集合才是不可變的。
儘管術語存在差異,但這兩種工廠方法具有幾乎相同的功能。深入查看 UnmodifyingList 內部,我們可以發現:
static <e> List<e> of(E e1) { return new ImmutableCollections.List12(e1); } </e></e>
令人驚訝的是,他們使用了不太精確的術語不可變,不過!
static final class List12<e> extends AbstractImmutableList<e> implements Serializable { @Stable private final E e0; @Stable private final E e1; List12(E e0) { this.e0 = Objects.requireNonNull(e0); this.e1 = null; } ... } </e></e>
static abstract class AbstractImmutableList<e> extends AbstractImmutableCollection<e> implements List<e>, RandomAccess { // all mutating methods throw UnsupportedOperationException @Override public void add(int index, E element) { throw uoe(); } @Override public boolean addAll(int index, Collection extends E> c) { throw uoe(); } @Override public E remove(int index) { throw uoe(); } @Override public void replaceAll(UnaryOperator<e> operator) { throw uoe(); } @Override public E set(int index, E element) { throw uoe(); } @Override public void sort(Comparator super E> c) { throw uoe(); } </e></e></e></e>
唯一的區別是 List12 有兩個欄位用於潛在的兩個元素,這也導致記憶體佔用可以忽略不計,除非處理大型物件。
結論
這次,我們比較了 Collections.singletonList 和 List.of 工廠方法來建立單元素清單。我們討論了 immutable 和 unmodulated 的語義,並表明這兩種方法都是高效、簡潔且資源輕的。如果您可以使用更新的 Java 版本,那麼它會更受歡迎,因為它熟悉、清晰,而且因為我們使用 List 介面的次數比 Collection 多得多。如果僅限於較舊的 Java 版本,Collections.singletonList 仍然是一個不錯的選擇。
以上是[程式碼比較] Collections.singletonList 與 List.of的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Java如何緩解平台特定的問題? Java通過JVM和標準庫來實現平台無關性。 1)使用字節碼和JVM抽像操作系統差異;2)標準庫提供跨平台API,如Paths類處理文件路徑,Charset類處理字符編碼;3)實際項目中使用配置文件和多平台測試來優化和調試。

java'splatformentenceenhancesenhancesmicroservicesharchitecture byferingDeploymentFlexible,一致性,可伸縮性和便攜性。 1)DeploymentFlexibilityAllowsibilityAllowsOllowsOllowSorlowsOllowsOllowsOllowSeStorunonAnyPlatformwithajvM.2)penterencyCrossServAccAcrossServAcrossServiCessImplifififiesDeevelopmentandeDe

GraalVM通過三種方式增強了Java的平台獨立性:1.跨語言互操作,允許Java與其他語言無縫互操作;2.獨立的運行時環境,通過GraalVMNativeImage將Java程序編譯成本地可執行文件;3.性能優化,Graal編譯器生成高效的機器碼,提升Java程序的性能和一致性。

效率testjavaapplicationsforplatformcompatibility oftheSesteps:1)setUpautomatedTestingTestingActingAcrossMultPlatFormSusingCitoolSlikeSlikeJenkinSorgithUbactions.2)contuctualtemualtemalualTesteTESTENRETESTINGINREALHARTWARETOLEALHARDOELHARDOLEATOCATCHISSUSESUSEUSENINCIENVIRENTMENTS.3)schictcross.3)schoscross.3)

Java編譯器通過將源代碼轉換為平台無關的字節碼,實現了Java的平台獨立性,使得Java程序可以在任何安裝了JVM的操作系統上運行。

ByteCodeachievesPlatFormIndenceByByByByByByExecutedBoviratualMachine(VM),允許CodetorunonanyplatformwithTheApprepreprepvm.Forexample,Javabytecodecodecodecodecanrunonanydevicewithajvm

Java不能做到100%的平台獨立性,但其平台獨立性通過JVM和字節碼實現,確保代碼在不同平台上運行。具體實現包括:1.編譯成字節碼;2.JVM的解釋執行;3.標準庫的一致性。然而,JVM實現差異、操作系統和硬件差異以及第三方庫的兼容性可能影響其平台獨立性。

Java通過“一次編寫,到處運行”實現平台獨立性,提升代碼可維護性:1.代碼重用性高,減少重複開發;2.維護成本低,只需一處修改;3.團隊協作效率高,方便知識共享。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版
中文版,非常好用

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。