Java集合框架
在此之前的Java2,Java提供特設課程,如字典,向量,堆棧和屬性(Dictionary, Vector, Stack,Properties)來存儲和處理的對象組。雖然這些類是非常有用的,他們缺乏一個中心,統一的主題。因此,所使用的矢量的方式是從使用屬性的方式不同。
集合框架的目的是要滿足幾個目標。
-
框架必須是高性能的。在實現了基本的集合(動態數組,鏈表,樹,哈希表)是高效的。
-
框架具有允許不同類型的集合以類似的方式和高度的互操作性。
-
擴展和/或適應的集合必須是容易的。
為此,整個集合框架是圍繞一組標準的接口設計。提供了幾種標準的實現,例如LinkedList,HashSet和TreeSet,這些接口,可以按原樣使用,也可以實現自己的集合。
一個集合框架是一個統一的體係結構來表示和操作集合。所有集合框架包含以下內容:
-
接口: 這些都是表示集合的抽象數據類型。接口允許其代表性細節的集合可以獨立操作。在麵向對象的語言,接口一般形成了一個等級。
-
實現,即類: 這些都是集合接口的具體實現。在本質上,它們是可重複使用的數據結構。
-
算法: 這些是執行有用的計算的方法,例如搜索和排序,在該實施集合接口的對象。說是多態的算法:也就是說,同樣的方法可以在許多不同的適當的集合接口的實現中使用。
除了集合該框架定義了幾個映射的接口和類。映射存儲鍵/值對。雖然映射是不是在正確使用的術語集合,但它們與集合完全集成。
集合接口:
集合框架定義了幾個接口。本節提供了每個接口的概述:
SN | 接口及描述 |
---|---|
1 |
Collection 接口 這可以使用對象組的工作,它是在集合層次結構的頂層。 |
2 |
List 接口 這擴展集合和列表的一個實例存儲元素的有序集合。 |
3 |
Set 這擴大集合到處理集合,其中必須包含獨特的元素 |
4 |
SortedSet 這擴展集合為處理有序集合 |
5 |
Map 這對應唯一鍵的值。 |
6 |
Map.Entry 這說明在映射中的元素(一個鍵/值對)。這是一個內部Map類。 |
7 |
SortedMap 擴展映射Map,這樣鍵維持升序排列。 |
8 |
Enumeration 這是傳統的接口和定義,通過它可以枚舉(獲得一次一個)的對象集合的元素的方法。這個傳統界麵已經被取代了迭代器。 |
集合類:
Java提供了一組實現Collection接口標準的集合類。一些類提供充分的實現,可以照原樣使用與其它的是抽象類,提供了用作起始用於創建具體的集合點的框架實現。
標準的集合類彙總如下表:
SN | 類及描述 |
---|---|
1 |
AbstractCollection 實現大多數的Collection接口。 |
2 |
AbstractList 擴展AbstractCollection並實現最List接口。 |
3 |
AbstractSequentialList 擴展AbstractList用於通過使用其元素的順序而不是隨機訪問的集合。 |
4 |
LinkedList 實現了一個鏈表通過擴展AbstractSequentialList。 |
5 |
ArrayList 實現了一個動態數組通過擴展AbstractList。 |
6 |
AbstractSet 擴展AbstractCollection並實現大部分的Set接口。 |
7 |
HashSet 擴展AbstractSet 使用哈希表。 |
8 |
LinkedHashSet 擴展HashSet,允許插入順序迭代。 |
9 |
TreeSet 實現了一組存儲在一個樹。擴展AbstractSet。 |
10 |
AbstractMap 實現大多數Map接口。 |
11 |
HashMap 擴展AbstractMap使用一個哈希表。 |
12 |
TreeMap 擴展AbstractMap用一棵樹。 |
13 |
WeakHashMap 擴展AbstractMap使用一個哈希表和弱鍵。 |
14 |
LinkedHashMap 擴展HashMap,允許插入順序迭代。 |
15 |
IdentityHashMap 擴展AbstractMap並使用引用相等性比較文檔時。 |
AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList 和 AbstractMap 類提供的核心集合接口的框架實現,以最大限度地減少實現它們所需的工作。
java.util中所定義的以下舊式類在以前的教學中已經討論過:
SN | 類及描述 |
---|---|
1 |
Vector 這樣就實現了動態數組。它類似於ArrayList,但有一些不同。 |
2 |
Stack 堆棧是向量的一個子類,實現了一個標準的後進先出的堆棧。 |
3 |
Dictionary 字典是代表一個鍵/值存儲庫,工作很像Map抽象類。 |
4 |
Hashtable Hashtable 哈希表是原來java.util中的一部分,是一個具體實現一個字典。 |
5 |
Properties Properties是哈希表的一個子類。它是用來維持值列表,其中鍵是一個字符串,值也是一個字符串。 |
6 |
BitSet BitSet 類創建一個特殊類型的數組保存位值。此數組的大小可以根據需要增加。 |
收集算法:
集合框架定義了可以被應用到集合和映射的幾種算法。這些算法被定義為集合類中的靜態方法。
有幾個方法可以拋出ClassCastException,當它嘗試進行比較不兼容的類型時,或者拋出一個UnsupportedOperationException,當它試圖修改一個不可修改的集合發生。
集合定義了三個靜態變量:EMPTY_SET,EMPTY_LIST和EMPTY_MAP。這些都是不可改變的。
SN | 算法及描述 |
---|---|
1 |
The Collection Algorithms 這裡是所有算法的實現的列表。 |
如何使用迭代器?
通常情況下,想通過循環在集合中的元素。例如,可能希望顯示的每個元素。
做到這一點最簡單的方法是使用一個迭代器,它是一個對象,它是實現迭代器或ListIterator接口。
迭代器,使能夠循環通過收集,獲取或移除元素。ListIterator擴展迭代器允許列表和元素的修飾雙向遍曆。
SN | 迭代器方法及描述 |
---|---|
1 |
使用Java迭代器 下麵是所有與迭代器的ListIterator和接口提供了實例方法的列表。 |
如何使用一個比較器?
這兩個TreeSet 和 TreeMap的存儲元素是已以排序順序。然而,它是定義它們排序順序裝置正是比較器。
這個接口可以讓我們以不同方式整理一個給定集合中所有數量。另外這個接口可用於任何類(甚至類,我們不能修改)任何實例進行排序。
SN | 比較器方法及描述 |
---|---|
1 |
使用Java比較器 這裡是所有由比較器接口提供實施例的方法的列表。 |
總結:
Java集合框架為程序員提供了獲取預先包裝的數據結構以及用於操縱他們的算法。
集合是一個對象,它可以容納其他對象的引用。集合接口聲明可以在每個類型的集合上執行的操作。
集合框架的類和接口都在java.util包中。