首先來看下java集合框架的總圖,在網(wǎng)上找了兩張關(guān)于集合框架的架構(gòu)圖: 以下內(nèi)容是基于以上架構(gòu)圖進行分析總結(jié): 集合框架主要分為兩大類:Collection和Map,。 CollectionCollection是List,、Set等集合高度抽象出來的接口,它包含了這些集合的基本操作,,它主要又分為兩大部分:List和Set,。 List接口通常表示一個列表(數(shù)組、隊列,、鏈表,、棧等),其中的元素可以重復(fù),,常用實現(xiàn)類為ArrayList和LinkedList,,另外還有不常用的Vector。另外,,LinkedList還是實現(xiàn)了Queue接口,,因此也可以作為隊列使用。 Set接口通常表示一個集合,,其中的元素不允許重復(fù)(通過hashcode和equals函數(shù)保證),,常用實現(xiàn)類有HashSet和TreeSet,HashSet是通過Map中的HashMap實現(xiàn)的,,而TreeSet是通過Map中的TreeMap實現(xiàn)的,。另外,TreeSet還實現(xiàn)了SortedSet接口,,因此是有序的集合(集合中的元素要實現(xiàn)Comparable接口,,并覆寫Compartor函數(shù)才行)。 我們看到,,抽象類AbstractCollection,、AbstractList和AbstractSet分別實現(xiàn)了Collection、List和Set接口,,這就是在Java集合框架中用的很多的適配器設(shè)計模式,,用這些抽象類去實現(xiàn)接口,在抽象類中實現(xiàn)接口中的若干或全部方法,,這樣下面的一些類只需直接繼承該抽象類,,并實現(xiàn)自己需要的方法即可,,而不用實現(xiàn)接口中的全部抽象方法。 AbstractList繼承AbstractCollection實現(xiàn)List/** * {@code AbstractList} is an abstract implementation of the {@code List} interface, optimized * for a backing store which supports random access. This implementation does * not support adding or replacing. A subclass must implement the abstract * methods {@code get()} and {@code size()}, and to create a * modifiable {@code List} it's necessary to override the {@code add()} method that * currently throws an {@code UnsupportedOperationException}. * * @since 1.2 */public abstract class AbstractListE> extends AbstractCollectionE> implements ListE> {} AbstractSet 繼承AbstractCollection實現(xiàn)Set/** * An AbstractSet is an abstract implementation of the Set interface. This * implementation does not support adding. A subclass must implement the * abstract methods iterator() and size(). * * @since 1.2 */public abstract class AbstractSet AbstractCollection實現(xiàn)Collection/** * Class {@code AbstractCollection} is an abstract implementation of the {@code * Collection} interface. A subclass must implement the abstract methods {@code * iterator()} and {@code size()} to create an immutable collection. To create a * modifiable collection it's necessary to override the {@code add()} method that * currently throws an {@code UnsupportedOperationException}. * * @since 1.2 */public abstract class AbstractCollectionE> implements CollectionE>{} MapMap是一個映射接口,,其中的每個元素都是一個key-value鍵值對,,同樣抽象類AbstractMap通過適配器模式實現(xiàn)了Map接口中的大部分函數(shù),TreeMap,、HashMap,、WeakHashMap等實現(xiàn)類都通過繼承AbstractMap來實現(xiàn),另外,,不常用的HashTable直接實現(xiàn)了Map接口,,它和Vector都是JDK1.0就引入的集合類。 TreeMap繼承AbstractMap實現(xiàn)NavigableMap/** @since 1.2 */public class TreeMap<>, V> extends AbstractMap<>, V> implements SortedMapK, V>, NavigableMapK, V>, Cloneable, Serializable {} NavigableMap繼承SortedMappublic interface NavigableMapK,V> extends SortedMapK,V> {} SortedMap接口繼承Map接口/** * A map that has its keys ordered. The sorting is according to either the * natural ordering of its keys or the ordering given by a specified comparator. */public interface SortedMapK,V> extends MapK,V> {} HashMap繼承AbstractMappublic class HashMap<>, V> extends AbstractMap<>, V> implements Cloneable, Serializable {} WeakHashMap繼承AbstractMap/* * @since 1.2 * @see HashMap * @see WeakReference */public class WeakHashMap<>, V> extends AbstractMap<>, V> implements Map<>, V> {} IteratorIterator是遍歷集合的迭代器(不能遍歷Map,,只用來遍歷Collection),,Collection的實現(xiàn)類都實現(xiàn)了iterator()函數(shù),它返回一個Iterator對象,,用來遍歷集合,,ListIterator則專門用來遍歷List。而Enumeration則是JDK1.0時引入的,,作用與Iterator相同,,但它的功能比Iterator要少,它只能再Hashtable,、Vector和Stack中使用,。 ListIterator繼承Iterator/** * An ListIterator is used to sequence over a List of objects. ListIterator can * move backwards or forwards through the list. */public interface ListIteratorE> extends IteratorE> {} 相關(guān)使用總結(jié)1、HashMap的總結(jié)
2,、LinkedHashMap的總結(jié)
3,、ArrayList的總結(jié)
4、LinkedList的總結(jié)
Arrays和Collections是用來操作數(shù)組、集合的兩個工具類,。 以上內(nèi)容是針對開頭的那張圖進行概括,,下面一系列文章進行相關(guān)源碼的分析,敬請期待,!
|
|