
實線邊框的是實現類,比如ArrayList,LinkedList,HashMap等,折線邊框的是抽象類,比如AbstractCollection,AbstractList,AbstractMap等,而點線邊框的是接口,比如Collection,Iterator,List等。
上述所有的集合類,都實現了Iterator接口,這是一個用于遍歷集合中元素的接口,主要包含hashNext(),next(),remove()三種方法。它的一個子接口LinkedIterator在它的基礎上又添加了三種方法,分別是add(),PRevious(),hasprevious()。也就是說如果實現Iterator接口,那么在遍歷集合中元素的時候,只能往后遍歷,被遍歷后的元素不會在遍歷到,通常無序集合實現的都是這個接口,比如HashSet,HashMap;而那些元素有序的集合,實現的一般都是LinkedIterator接口,實現這個接口的集合可以雙向遍歷,既可以通過next()訪問下一個元素,又可以通過previous()訪問前一個元素,比如ArrayList。
兩者都是有序的,允許重復元素,在定位元素、增刪元素上效率不同
HashSet無序不可重復
TreeSet比HashSet有所改進,是一個有序的集合(默認使用紅黑樹完成排序)。這里排序是通過元素比較為依據,不是插入的順序。
LinkedHashSet在HashSet的基礎上又形成了雙向鏈表,可以記住插入的順序
HashMap鍵必須唯一,值可以重復,沒有順序
TreeMap在HashMap的基礎上有所改進,通過比較鍵值來實現排序,是一個有序的鍵值對。
LinkedHashMap在HashSet的基礎上又形成了雙向鏈表,用來記住插入的順序。
另外,LinkedHashMap可以按照訪問順序,對映射條目進行調整,使得每次被訪問的條目都會自動移動到雙向鏈表的尾部,如果要使用這種功能,請使用LinkedHashMap<K,V>(initialCapacity,loadFactor,true)
以弱鍵實現的基于哈希表的 Map。在 WeakHashMap中,當某個鍵不再正常使用時,將自動移除其條目。
使用短時間內就過期的緩存時最好使用weakHashMap,它包含了一個自動調用的方法expungeStaleEntries,這樣就會在值被引用后直接執行這個隱含的方法,將不用的鍵清除掉。
參考:
http://blog.csdn.net/liulin_good/article/details/6213815
《java核心技術 卷I 基礎知識》
新聞熱點
疑難解答