簡介
Java 提供了用于管理和操作資料的接口。
這稱為 Java 集合架構 (JCF)。
由于它根據要存儲和管理的資料的類型和特征提供各種形式和實作,
讓我們根據需要的情況應用和使用它。
JCF
JCF是指一個資料集接口架構,它統稱為 Collection 和 Map 接口。
一組資料被定義為 Collection ,它擴充了 Iterable 接口。
Iterable 實作了一個接口結構,允許通路屬于集合的元素。
this 的通路被定義為通過 Iterator 通路。
Collection 提供一維資料管理。
具有代表性的Collection實作接口如下:
List :保證順序,不保證唯一性(即可能出現重複)。
Queue:實作了一個通用的隊列類型結構。
Set :不保證順序,但保證唯一性(不重複)。
Map: 具有二維(鍵值)結構。
List
一個索引的、有序的集合。
典型的實作類是:
- ArrayList
每個資料都附有索引(順序),通過它可以快速通路。
但是,在删除或插入中間資料的情況下,整個資料結構都會被修改。
是以,記憶體效率低下。
- LinkedList
為每個資料生成一個點,并使用該點組成每個資料。
當删除或插入發生時,記憶體效率低下最小化,但搜尋資料時時間很慢。
- Vector
線程安全得到保證,在通路線程時通過加鎖來保證線程同步。
它用于保證在多線程環境中的穩定值。
- Stack
這是一個典型隊列結構的資料結構。
Set
是一種不保證順序,保證唯一性的資料結構。
也就是說,它是一個不重疊的無序資料結構。
- HashSet : 最純粹的集合資料結構,完全随機排序。
通過覆寫equals和hashCode,區分對象,從根本上防止重複存儲。
- LinkedHashSet:這是一個Set資料結構,按照輸入順序存儲資料。
它繼承并實作了HashSet,按插入順序管理資料。
- TreeSet:是一種内部按升序排序的Set資料結構。
添加和删除資料需要時間,但搜尋和排序非常好(當然因為它是樹結構...)
Map
它是一種以鍵值格式以二維形式管理資料的資料結構。
導入資料時,一種序列是鍵,它所在的列是值,是以你可以把它看成是一個即時的、動态的小型資料庫。
基本上不保證資料辨別符Key的順序。
- HashMap:是一種純Map資料結構,資料以完全随機的順序存儲。
- TreeMap:它是一種Map資料結構,其中的鍵在内部進行了排序。
插入删除操作速度快,特點是自動排序。
- HashTable:線程安全的同步方法組合。
是以,它是一種用于在多線程環境下保證穩定值的資料結構。
- LinkedHashMap:它是一種Map資料結構,按照輸入的順序存儲資料。
HashMap 是随機輸出和有序結構,而 LinkedHashMap 保持插入順序。
Queue
它是一種資料結構,對應于隊列資料結構的一般概念。
從尾巴到超市結賬的方法(排隊)
計算方式與頭部(出隊)結構相同。
- AbstractQueue:最純粹的隊列資料結構。
它是第一個為優先級隊列構造的隊列對象,允許将其聲明和實作為原始隊列。
與一般通過中間資料結構的其他資料結構不同,它實作了 AbstractCollection 類,這是 Collection 接口的抽象類。
- LinkedList:這是一個使用連結清單實作的隊列資料結構。
這是一個用于實作通用隊列的實作類。
- ArrayDeque:這是一個作為甲闆資料結構實作的隊列資料結構。
可以在前端(head)和尾部(tail)同時實作出隊(删除)和入隊(插入)操作。
- PriorityQueue:這是一個優先級隊列資料結構。
通過為每個資料實作優先級來排隊處理任務
- BlockingQueue:這是為確定線程安全而實作的資料結構。
如果兩個線程同時通路出隊任務,就會出現異常。
為了解決這個問題,通過 Concurrent 包實作并提供了阻塞的概念。
它通過線程等待通用隊列的 put、offer、take、poll、peek 來工作。
換句話說,如果隊列在條目之間飽和或為空,或者如果另一個線程正在通路它,則線程等待并在它被釋放時執行指令。
特别是,可以使用一種稱為 drainTo(Collection) 的方法,放入該集合的所有元素 (c)
可以使用下面兩種來實作:
ArrayBlockingQueue
LinkedBlockingQueue
6.Deque(雙端隊列)
擴充 Queue 接口的概念。
一個普通的隊列可以從Head取資料(dequeue),從tail放資料(enqueue)。
實作方式:
- linkedList:基于 LinkedList 的索引資料結構。
它是一種允許基本甲闆構造的實作。
- ArrayDeque:這是一種用于建構索引的資料結構。
此實作由 Array 支援,是以非常高效,因為它會立即移動而無需額外的記憶體引用。
- LinkedBlockingDeque
提供允許單個線程一次隻能通路一個(阻塞)的功能。
- ConcurrentLinkedDeque:保證并行線程安全的索引結構。
正如Concurrent這個詞所說的那樣,它是一種保證ThreadSafe的保證資料結構。
由于是Linked資料結構,是以具有Linked的大部分優點和缺點。
Stack
它是一種實作常用棧概念的資料結構。
既然是繼承了遺留的Vector建構的資料結構,那麼Thread Safe自然是有保證的,
由于并發通路線程固定為單一資料結構,不适合作為多線程環境下的資料結構。
- Stack:這是一種常用的棧資料結構。
堆中使用的概念被實作為方法。
Iterator(疊代器)
Iterator 是一個接口,它指定了一個可通路由 Collection 擴充的 Iterable 的接口。
該實作可以通路 Collection 并檢索其元素。
Iterable(可疊代對象)
簡單來說,For語句可以操作的資料結構是Iterable資料結構的一種實作。
換句話說,如果目标資料可以通過疊代(for,while)通路,它擴充了Iterable。
- 任何 Iterable 擴充接口實作
當然...擴充 Iterable 的實作是 Iterable 的目标。
總結:
以上内容是很基礎的集合知識,幫助我們平時開發的時候更正确的去使用集合結構以及避免BUG困擾。這些知識需要牢記,值得反複查閱。