JAVA8集合框架——介紹

 這裏只做對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方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章