這裏只做對java常用集合做一個簡單梳理,後續章節會有對應的用法及源碼講解
Java集合是java提供的工具包(java.util.*),包含了常用的數據結構:集合、鏈表、隊列、棧、數組、映射等
java8的詳細中文api地址:https://www.matools.com/api/java8
下圖是常用的集合框架圖:
-
Iterable<T>
實現此接口允許對象成爲“for-each loop”語句的目標,for-each循環是Java相比C語言中的for循環拓展而來的一種新的遍歷數組的循環方式。
for-each用法: for ( 變量類型 變量名 : 數組名 ) { 需要執行的循環語句; }
- Collection<E>
集合層次結構中的根界面 。 集合表示一組被稱爲其元素的對象。 一些集合允許重複元素,而其他集合不允許。 有些被命令和其他無序。 JDK不提供此接口的任何直接實現:它提供了更具體的子接口的實現,如Set和List 。 該界面通常用於傳遞集合,並在需要最大的通用性的情況下對其進行操作。
- List<E>
有序集合(也稱爲序列 )。 該界面的用戶可以精確控制列表中每個元素的插入位置。 用戶可以通過整數索引(列表中的位置)訪問元素,並搜索列表中的元素。
- ArrayList<E>
可調整大小的數組的實現List接口。 實現所有可選列表操作,並允許所有元素,包括null 。 除了實現List 接口之外,該類還提供了一些方法來操縱內部使用的存儲列表的數組的大小。請注意,此實現不同步。 如果多個線程同時訪問884457282749實例,並且至少有一個線程在結構上修改列表,則必須在外部進行同步。 (結構修改是添加或刪除一個或多個元素的任何操作,或明確調整後臺數組的大小;僅設置元素的值不是結構修改。)這通常是通過在一些自然地封裝了列表。 如果沒有這樣的對象存在,列表應該使用Collections.synchronizedList方法“包裝”。
- LinkedList<E>
雙鏈表實現了List和Deque接口。 實現所有可選列表操作,並允許所有元素(包括null )。所有的操作都能像雙向列表一樣預期。 索引到列表中的操作將從開始或結束遍歷列表,以更接近指定的索引爲準。請注意,此實現不同步。 如果多個線程同時訪問鏈接列表,並且至少有一個線程在結構上修改列表,則必須在外部進行同步。 (結構修改是添加或刪除一個或多個元素的任何操作;僅設置元素的值不是結構修改。)這通常通過在自然封裝列表的對象上進行同步來實現。 如果沒有這樣的對象存在,列表應該使用Collections.synchronizedList方法“包裝”。
- Vector<E>
Vector類實現了可擴展的對象數組。 像數組一樣,它包含可以使用整數索引訪問的組件。 但是, Vector的大小可以根據需要增長或縮小,以適應在創建Vector之後添加和刪除項目。 Vector是同步的。 如果不需要線程安全的實現,建議使用ArrayList代替Vector 。
- Stack<E>
Stack類代表最先進先出(LIFO)堆棧的對象。 它擴展了類別Vector與五個操作,允許一個向量被視爲堆棧。 設置在通常的push和pop操作,以及作爲一種方法來peek在堆棧,以測試堆棧是否爲empty的方法,以及向search在棧中的項目的方法在頂部項目和發現多遠它是從頂部。
- Set<E>
不包含重複元素的集合。
- HashSet<E>
此類實現Set接口,由哈希表(實際爲HashMap實例)支持。 對集合的迭代次序不作任何保證; 特別是,它不能保證訂單在一段時間內保持不變。 這個類允許null元素。請注意,此實現不同步。 如果多個線程併發訪問哈希集,並且至少有一個線程修改該集合,那麼它必須在外部進行同步。 這通常通過在自然地封裝集合的一些對象上進行同步來實現。 如果沒有這樣的對象存在,那麼該集合應該使用Collections.synchronizedSet方法“包裝”。
- TreeSet<E>
請注意,此實現不同步。 如果多個線程併發訪問樹,並且至少有一個線程修改該集合,則必須在外部進行同步。 這通常通過在自然地封裝集合的一些對象上進行同步來實現。 如果沒有這樣的對象存在,那麼該集合應該使Collections.synchronizedSortedSet方法“包裝”。
- Map<K,V>
將鍵映射到值的對象。 Map不能包含重複的鍵; 每個鍵可以映射到最多一個值。
- ConcurrentHashMap<K,V>
支持檢索的完全併發性和更新的高預期併發性的哈希表。 這個類服從相同功能規範如Hashtable ,並且包括對應於每個方法的方法版本Hashtable 。 不過,儘管所有操作都是線程安全的,檢索操作並不意味着鎖定,並沒有爲防止所有訪問的方式鎖定整個表的任何支持。 這個類可以在依賴於線程安全性的程序中與Hashtable完全互Hashtable ,但不依賴於其同步細節。
- HashMap<K,V>
基於哈希表的實現的Map接口。 此實現提供了所有可選的地圖操作,並允許null的值和null鍵。 ( HashMap類大致相當於Hashtable ,除了它是不同步的,並允許null)。這個類不能保證地圖的順序; 特別是,它不能保證訂單在一段時間內保持不變。
- Hashtable<K,V>
該類實現了一個哈希表,它將鍵映射到值。 任何非null對象都可以用作鍵值或值。爲了從散列表成功存儲和檢索對象,用作鍵的對象必須實現hashCode方法和equals方法。