1. 程式人生 > >Collection介面下的一些其他子類

Collection介面下的一些其他子類

1.LinkedHashMap

LinkedHashMap繼承於HashMap,很多方法都是HashMap的方法,但是它的資料取得是有序的,即怎樣的順序插入就按怎樣的順序取出,底層用一個雙向連結串列保證有序性。
這裡寫圖片描述
ture表示按訪問順序排序(即插入152,取得152),false表示按插入順序排序(即插入152,取得125)
預設建構函式中預設使用accessOrder=false,故預設採用插入順序排序:
這裡寫圖片描述

2.TreeMap

TreeMap是基於紅黑樹實現的一種Map實現類,底層屬性除了key和value之外,還有Entry型的root,在Entry中還有其特有的屬性 :
這裡寫圖片描述

特點及使用場景:

1.TreeMap的查詢、插入、刪除效率均沒有HashMap高,一般只有要對key排序時才使用TreeMap。
2.TreeMap的key不能為null。
3.TreeMap不是同步的。

3.WeakHashMap

基本屬性與HashMap相同,就是多出了一個ReferenceQueue型的屬性queue。
這裡寫圖片描述
WeakHashMap的特殊之處在於entry可能會被GC自動刪除,即使我們沒有呼叫remove()或者clear()方法,因為WeakHashMap 內部是通過弱引用來管理entry的。

4.HashSet

HashSet是一個基於HashMap實現Set介面的特殊集合,它擁有HashMap的所有基礎屬性,區別在於Set集合只能儲存物件,所以HashSet中資料不是以鍵值對的形式存在的,它的資料是無序且不能重複的,可以為null,執行緒不安全。
這裡寫圖片描述


這裡寫圖片描述

add()方法:當資料不存在或key為null時進行插入返回true,當資料已經存在時返回false。

5.LinkedHashSet

LinkedHashSet繼承於HashSet,所以它也是基於HashMap實現的一種Set集合的實現子類,看一看它的建構函式:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
可以看到其建構函式都是呼叫了父類的帶有三個引數的建構函式,即:
這裡寫圖片描述
再向上檢視LinkedHashMap帶有兩個引數的建構函式,即:
這裡寫圖片描述
可以看到AccessOrder=false,由前面介紹到的LinkedHashMap的知識可知LinkedHashSet實現的是插入有序。

6.集合的一些使用技巧

1.需要唯一:

·需要:Set
·不需要:Map

2.需要制定順序:

   ·需要: TreeSet
   ·不需要:HashSet

3.是否想要一個和儲存一致的順序(有序):

   ·需要:LinkedHashSet
   ·不需要:List

4.需要頻繁增刪:

    ·需要:LinkedList
    ·不需要:ArrayList

5.記錄每一個容器的結構和所屬體系

 看名字,比如:
    ·List:ArrayList,LinkedList
    ·Set:HashSet,TreeSet
    字尾名就是該集合所屬的體系,字首名就是該集合的資料結構。

6.看到array:就要想到陣列,就要想到查詢快,有索引
7.看到link:就要想到連結串列,就要想到增刪快
8.看到hash:就要想到雜湊表,就要想到唯一性
9.看到tree:就要想到二叉樹,就要想要排序,就要想到兩個介面Comparable,Comparator 。

注:以上使用的API版本為JDk1.7.0_81