20180826(02)-Java集合框架
Java 集合框架
早在Java 2中之前,Java就提供了特設類。
比如:Dictionary, Vector, Stack, 和Properties這些類用來存儲和操作對象組。
雖然這些類都非常有用,但是它們缺少一個核心的,統一的主題。由於這個原因,使用Vector類的方式和使用Properties類的方式有著很大不同。
集合框架被設計成要滿足以下幾個目標。
1.該框架必須是高性能的。基本集合(動態數組,鏈表,樹,哈希表)的實現也必須是高效的。
2.該框架允許不同類型的集合,以類似的方式工作,具有高度的互操作性。
3.對一個集合的擴展和適應必須是簡單的。
為此,整個集合框架就圍繞一組標準接口而設計。
你可以直接使用這些接口的標準實現,諸如: LinkedList, HashSet, 和 TreeSet等,除此之外你也可以通過這些接口實現自己的集合。
集合框架是一個用來代表和操縱集合的統一架構。所有的集合框架都包含如下內容:
接口:是代表集合的抽象數據類型。接口允許集合獨立操縱其代表的細節。在面向對象的語言,接口通常形成一個層次。
實現(類):是集合接口的具體實現。從本質上講,它們是可重復使用的數據結構。
算法:是實現集合接口的對象裏的方法執行的一些有用的計算,例如:搜索和排序。這些算法被稱為多態,那是因為相同的方法可以在相似的接口上有著不同的實現。
除了集合,該框架也定義了幾個Map接口和類。Map裏存儲的是鍵/值對。盡管Map不是collections,但是它們完全整合在集合中。
集合接口
集合框架定義了一些接口。本節提供了每個接口的概述:
Collection 接口
允許你使用一組對象,是Collection層次結構的根接口。
List 接口
繼承於Collection和一個 List實例存儲一個有序集合的元素。
Set
繼承於 Collection,是一個不包含重復元素的集合。
SortedSet
繼承於Set保存有序的集合。
Map
將唯一的鍵映射到值。
Map.Entry
描述在一個Map中的一個元素(鍵/值對)。是一個Map的內部類。
SortedMap
繼承於Map,使Key保持在升序排列。
Enumeration
這是一個傳統的接口和定義的方法,通過它可以枚舉(一次獲得一個)對象集合中的元素。這個傳統接口已被叠代器取代。
集合類
Java提供了一套實現了Collection接口的標準集合類。其中一些是具體類,這些類可以直接拿來使用,而另外一些是抽象類,提供了接口的部分實現。
標準集合類匯總於下表:
AbstractCollection
實現了大部分的集合接口
AbstractList
繼承於AbstractCollection並且實現了大部分List接口
AbstractSequentialList
繼承於 AbstractList ,提供了對數據元素的鏈式訪問而不是隨機訪問。
LinkedList
繼承於 AbstractSequentialList,實現了一個鏈表。
ArrayList
通過繼承AbstractList,實現動態數組。
AbstractSet
繼承於AbstractCollection 並且實現了大部分Set接口。
HashSet
繼承了AbstractSet,並且使用一個哈希表。
LinkedHashSet
具有可預知叠代順序的 Set 接口的哈希表和鏈接列表實現。
TreeSet
繼承於AbstractSet,使用元素的自然順序對元素進行排序.
AbstractMap
實現了大部分的Map接口。
HashMap
繼承了HashMap,並且使用一個哈希表。
TreeMap
繼承了AbstractMap,並且使用一顆樹。
WeakHashMap
繼承AbstractMap類,使用弱密鑰的哈希表。
LinkedHashMap
繼承於HashMap,使用元素的自然順序對元素進行排序.
IdentiyHashMap
繼承AbstractMap類,比較文檔時使用引用相等。
Vector
Vector類實現了一個動態數組。和ArrayList和相似,但是兩者是不同的。
Stack
棧是Vector的一個子類,它實現了一個標準的後進先出的棧。
Dictionary
Dictionary 類是一個抽象類,用來存儲鍵/值對,作用和Map類相似。
Hashtable
Hashtable是原始的java.util的一部分, 是一個Dictionary具體的實現 。
Properties
Properties 繼承於 Hashtable.表示一個持久的屬性集.屬性列表中每個鍵及其對應值都是一個字符串。
BitSet
一個Bitset類創建一種特殊類型的數組來保存位值。BitSet中數組大小會隨需要增加。
一個Bitset類創建一種特殊類型的數組來保存位值。BitSet中數組大小會隨需要增加。
集合算法
集合框架定義了幾種算法,可用於集合和映射。這些算法被定義為集合類的靜態方法。
在嘗試比較不兼容的類型時,一些方法能夠拋出 ClassCastException異常。當試圖修改一個不可修改的集合時,拋出UnsupportedOperationException異常。
集合定義三個靜態的變量:EMPTY_SET EMPTY_LIST,EMPTY_MAP的。這些變量都不可改變。
Collection Algorithms
這裏是一個列表中的所有算法實現。
如何使用叠代器
通常情況下,你會希望遍歷一個集合中的元素。例如,顯示集合中的每個元素。
做到這一點最簡單的方法是采用一個叠代器,它是一個對象,實現了Iterator 接口或ListIterator接口。
叠代器,使你能夠通過循環來得到或刪除集合的元素。ListIterator繼承了Iterator,以允許雙向遍歷列表和修改元素。
這裏通過實例列出Iterator和listIterator接口提供的所有方法。
如何使用比較器
TreeSet和TreeMap的按照排序順序來存儲元素. 然而,這是通過比較器來精確定義按照什麽樣的排序順序。
這個接口可以讓我們以不同的方式來排序一個集合。
比較器方法描述
使用 Java Comparator
這裏通過實例列出Comparator接口提供的所有方法
總結
Java集合框架為程序員提供了預先包裝的數據結構和算法來操縱他們。
集合是一個對象,可容納其他對象的引用。集合接口聲明對每一種類型的集合可以執行的操作。
集合框架的類和接口均在java.util包中。
20180826(02)-Java集合框架