Java 2 之前,Java 為對(duì)象組的存儲(chǔ)和操作提供了特別的類比如 字典,向量,堆棧和屬性。盡管這些類確實(shí)有用,它們?nèi)鄙僖粋€(gè)中心的,統(tǒng)一的主題。因此,你使用向量的方法和你使用屬性的方法是不同的。
集合框架被設(shè)計(jì)來(lái)滿足幾個(gè)目標(biāo)
為此,整個(gè)集合框架被設(shè)計(jì)圍繞一系列的標(biāo)準(zhǔn)接口。幾個(gè)接口的標(biāo)準(zhǔn)實(shí)現(xiàn)例如 LinkedList, HashSet 和 TreeSet 被提供,如果你選擇的話,你可以使用,你也可以實(shí)現(xiàn)你自己的集合。
一個(gè)集合框架是一個(gè)統(tǒng)一的體系結(jié)構(gòu)表示和操作集合。所有的集合框架包含以下:
除了集合,框架定義了幾個(gè) map 接口和類 Maps 存儲(chǔ)鍵值對(duì)。盡管 maps 不是正確使用集合的術(shù)語(yǔ),但是他們完全由集合整合起來(lái)。
集合框架定義了幾個(gè)接口。如下提供了每個(gè)接口的概覽:
SN | 接口描述 |
---|---|
1 | Collection 接口 這讓你可以使用對(duì)象組;它是集合層次階段的頂端 |
2 | List 接口 它繼承了 Collection 并且 List 的一個(gè)實(shí)例存儲(chǔ)了元素的一個(gè)有序集合 |
3 | Set 它繼承了 Collection 來(lái)處理集,它必須含有特殊的元素 |
4 | SortedSet 它繼承了 Set 來(lái)處理 排序的 set |
5 | Map 它將獨(dú)特的鍵和值匹配 |
6 | Map Entry 這描述了映射中的一個(gè)元素(一個(gè)鍵值對(duì))。它是 Map 的一個(gè)內(nèi)部類。 |
7 | SortedMap 它繼承了 Map 因此鍵按升序保持 |
8 | Enumeration 它是舊有的接口并定義了你可以在對(duì)象的集合中列舉(一次獲得一個(gè))元素的方法。這個(gè)舊有的接口被迭代器取代了。 |
Java 提供了一系列的實(shí)現(xiàn)集合接口的標(biāo)準(zhǔn)集合類。一些類提供了完全的能被直接使用的實(shí)現(xiàn),其他就是抽象類,提供的被用來(lái)作為創(chuàng)建具體集合的實(shí)現(xiàn)。
標(biāo)準(zhǔn)的 collection 類在下面的表格中被概括:
SN | 類描述 |
---|---|
1 | AbstractCollection 實(shí)現(xiàn)大部分的 Collection 接口 |
2 | AbstractList 繼承 AbstractCollection 并且實(shí)現(xiàn)大部分 List 接口 |
3 | AbstractSequentialList 通過(guò)一個(gè)使用有序的而不是隨機(jī)訪問(wèn)它的元素的集合繼承 AbstractList |
4 | LinkedList 通過(guò)繼承 AbstractSequentialList 實(shí)現(xiàn)一個(gè)鏈表 |
5 | ArrayList 通過(guò)繼承 AbstractList 實(shí)現(xiàn)一個(gè)動(dòng)態(tài)數(shù)組 |
6 | AbstractSet 繼承 AbstractCollection 并實(shí)現(xiàn)大部分的 Set 接口 |
7 | HashSet 用一個(gè)哈希表繼承 AbstractSet |
8 | LinkedHashSet 繼承 HashSet 來(lái)允許插入順序迭代 |
9 | TreeSet 實(shí)現(xiàn)在樹(shù)中存儲(chǔ)的一個(gè)集。繼承 AbstractSet |
10 | AbstractMap 實(shí)現(xiàn)大部分的 Map 接口 |
11 | HashMap 用一個(gè)哈希表繼承 AbstractMap |
12 | TreeMap 用一棵樹(shù)繼承 AbstractMap |
13 | WeakHashMap 用一個(gè)使用弱鍵的哈希表來(lái)繼承 AbstractMap |
14 | LinkedHashMap 繼承 AbstractMap 來(lái)允許插入順序迭代 |
15 | IdentityHashMap 繼承 AbstractMap 類并且當(dāng)比較文檔時(shí)平等使用參考 |
AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList 和 AbstractMap 類提供了核心集合接口的實(shí)現(xiàn),盡量減少努力來(lái)實(shí)現(xiàn)它們。
以下的由 java.util 定義的舊有的類在前面的指南中已經(jīng)被討論過(guò):
SN | 類描述 |
---|---|
1 | Vector 這實(shí)現(xiàn)一個(gè)動(dòng)態(tài)數(shù)組。它和 ArrayList 類似,但也有一些不同。 |
2 | Stack Stack 是 Vector 的實(shí)現(xiàn)標(biāo)準(zhǔn)的后進(jìn)先出棧的子類 |
3 | Dictionary Dictionary 是一個(gè)抽象的代表一個(gè)鍵值對(duì)存儲(chǔ)庫(kù)的類并且操作起來(lái)非常像 Map |
4 | Hashtable Hashtable 是初始的 java.util 的一部分并且是 Dictionary 的具體實(shí)現(xiàn) |
5 | Properties Properties 是 Hashtable 的一個(gè)子類。它被用來(lái)保持鍵是一個(gè)字符串并且值也是一個(gè)字符串的值的列表 |
6 | BitSet 一個(gè) BitSet 類創(chuàng)建一個(gè)特殊的保持 bit 數(shù)值的數(shù)組類型。這個(gè)數(shù)組的大小能根據(jù)需要增長(zhǎng) |
集合框架定義了幾個(gè)能被應(yīng)用到 collections 和 maps 的算法。這些算法在 Collection 類的內(nèi)部被定義為靜態(tài)方法。
幾個(gè)方法能拋出異常 ClassCastException,它發(fā)生在想要比較不兼容的類型時(shí);或者異常UnsupportedOperationException,它發(fā)生在想要修改一個(gè)不能修改的集合時(shí)。
集合定義了三個(gè)靜態(tài)變量:EMPTY_SET, EMPTY_LIST, 和 EMPTY_MAP。所有都是不變的。
SN | 算法描述 |
---|---|
1 | The Collection Algorithms 這是所有算法實(shí)現(xiàn)的列表 |
通常,你想要在集合中循環(huán)元素。比如,你可能想要顯示每個(gè)元素。
這么做最簡(jiǎn)單的方法是使用 Iterator,它是一個(gè)實(shí)現(xiàn)或者是 Iterator 或者 ListIterator 接口的對(duì)象。
Iterator 讓你可以通過(guò)一個(gè)集合循環(huán),獲得或者除去元素。ListIterator 繼承了 Iterator 來(lái)允許一個(gè)列表的雙向遍歷和元素的修改。
SN | Iterator 方法描述 |
---|---|
1 | 使用 Java Iterator 這是所有由 Iterator 和 ListIterator 接口提供的有例子的方法的列表。 |
TreeSet 和 TreeMap 都以順序保存元素。然而,是 Comparator 精確定義排序意味著什么。
這個(gè)接口讓我們將一個(gè)給定的集合用不同數(shù)量的方法排序。這個(gè)接口也能被用來(lái)排列任何類的任何實(shí)例(甚至是我們不能修改的類)。
SN | Iterator 方法描述 |
---|---|
1 | 使用 Java Comparator 這是所有由 Comparator 接口提供的有例子的方法的列表。 |
Java 集合框架給了程序員打包數(shù)據(jù)結(jié)構(gòu)和操作它們的算法的入口。
一個(gè)集合是一個(gè)能對(duì)其他對(duì)象引用的對(duì)象。collection 接口聲明了能在每一個(gè)集合類型上操作的操作。
集合框架的類和接口都在 java.util 包內(nèi)。