#Java集合是java提供的工具包,包含了常用的資料結構:集合、鍊錶、佇列、堆疊、陣列、映射等。 Java集合工具包位置是java.util.*
Java集合主要可以分割為4個部分:List列表、Set集合、Map映射、工具類別(Iterator迭代器、Enumeration枚舉類別、Arrays和Collections)。
Java集合架構如下圖:
#由上圖可以看到Java框架主要是Collection和Map。
一、Collection是一個介面,是一個高度抽象的集合,介麵包含了基本運算和屬性。
Collection包含了List與Set兩大分支:
1)、List是一個有順序的佇列,每個元素都有它的索引# ,第一個元素的索引值是0。 List的實作類別有LinkedList、ArrayList、Vector和Stack。
(1)、LinkedList實作了List接口,允許元素為空,LinkedList提供了額外的get,remove,insert方法,這些操作可以使LinkedList被用作堆疊、佇列或雙向佇列。
LinkedList並不是執行緒安全的,如果多個執行緒同時存取LinkedList,則必須自行實現存取同步,或者另一個解決方法是在建立List時建構一個同步的List。
(2)、ArrayList 實作了變化大小的數組,讓所有元素包含null,同時ArrayList也不是執行緒安全的。
(3)、Vector類似ArrayList,但Vector是執行緒安全的。
(4)、Stack繼承自Vector,實作一個後進先出的堆疊。
Vector、ArrayLis和LinkedList比較:
(1)Vector為執行緒安全的,ArrayList和LinkedList不是線程。
(2)ArrayList和Vector是實作了基於動態陣列的資料結構而LinkedList是基於鍊錶的資料結構。
(3)陣列與鍊錶的查詢,刪除等的效能。
2)、set是一個不允許有重複元素的集合。 set的實作類別有Hashset和Treeset。 HashSet依賴HashMap,實際上是透過HashMap實現的;TreeSet依賴TreeMap,透過TreeMap來實現的。
二、Map是一個映射接口,採用key-value鍵值對的方式。
AbstractMap是一個抽象類別,它實作了Map介面中大部分的API,而HashMap、TreeMap和WeakHashMap都是繼承於AbstractMap,HashTable雖然繼承於Dictionary,但它實作了Map介面。
1)、HashTable
(1)HashTable繼承Map介面,實作一個key-value對應的哈希表,任何非空的物件都可作為key或value。
(2)新增資料put、取出資料get兩個運算的時間開銷為常數。
(3)由於作為key的物件是透過計算其雜湊函數來確定與之對應的value的位置,因此任何作為key的物件都必須實現hashCode和equals方法。 hashCode和equals方法都是繼承自根類別Object。
(4)HashTable是執行緒安全的。
2)、HashMap
(1)HashMap和HashTable類似,但HashMap是非執行緒安全的,且允許key和value都為空。
(2)將HashMap視為Collection時,其迭代操作時間開銷和HashMap的容量成正比,如果迭代性能的操作相當重要的話,不要將HashMap的初始化容量捨得過高。
3)、TreeMap
(1)HashMap透過Hashcode對其內容進行快速查找,無序的,而TreeMap中所有的元素都保持著某種固定的順序,有序的。
(2)TreeMap沒有調優選項,因為該樹總是處於平衡狀態。
4)、WeakHashMap
(1) WeakHashMap是改良的HashMap,它對key實行「弱引用」,如果一個key不再被外部所引用,那麼該key可以被GC回收。
總結
(1)如果涉及堆疊,佇列等操作,應該考慮用List;對於需要快速插入,刪除元素,應該使用LinkedList;如果需要快速隨機存取元素,應該使用ArrayList。
(2)如果程式在單執行緒環境中,或存取僅在一個執行緒中進行,考慮非同步的類,其效率較高;如果多個執行緒可能同時操作一個類,應該使用同步的類。
(3)要特別注意對雜湊表的操作,作為key的物件要正確複寫equals和hashCode方法。
(4)使用Map時,尋找、更新、刪除、新增最好使用HashMap或HashTable;對Map進行自然順序或自訂鍵順序遍歷時,最好使用TreeMap;
(5)盡量回傳介面而非實際的類型,例如回傳List而非ArrayList,這樣如果以後需要將ArrayList換成LinkedList時,客戶端程式碼就不用改變。這就是針對抽象程式。
Collection介面原始碼
public interface Collection<E> extends Iterable<E> { int size(); //大小 boolean isEmpty();//是否为空 boolean contains(Object o); //是否包含某个对象 Iterator<E> iterator(); //迭代 Object[] toArray(); //转化为数组 <T> T[] toArray(T[] a); boolean add(E e); //增加对象 boolean remove(Object o); //删除对象 boolean containsAll(Collection<?> c); //判断是否包含相同的Collection boolean addAll(Collection<? extends E> c); //将Collection追加到 boolean removeAll(Collection<?> c); //删除所有相同对象 default boolean removeIf(Predicate<? super E> filter) { Objects.requireNonNull(filter); boolean removed = false; final Iterator<E> each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove(); removed = true; } } return removed; } boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o); int hashCode(); @Override default Spliterator<E> spliterator() { return Spliterators.spliterator(this, 0); } default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); } default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true); } }
以上是Java集合之Collection具體詳解的詳細內容。更多資訊請關注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
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

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

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

禪工作室 13.0.1
強大的PHP整合開發環境