1.Set接口的實現類
共同的特點:1):都不允許元素重複.
2):都不是線程安全的類.
解決方案:Set s = Collections.synchronizedSet(Set對象);
-----------------------------------------------------------------------------------------
HashSet: 不保證元素的先後添加順序.
底層採用的是哈希表算法,查詢效率極高.
判斷兩個對象是否相等的規則:
1):equals比較爲true.
2):hashCode值相同.
要求:要求存在在哈希中的對象元素都得覆蓋equals和hashCode方法.
HashSet的子類,底層也採用的是哈希表算法,但是也使用了鏈表算法來維持元素的先後添加順序.
判斷兩個對象是否相等的規則和HashSet相同.
因爲需要多使用一個鏈表倆記錄元素的順序,所以性能相對於HashSet較低.
一般少用, 如果要求一個集合既要保證元素不重複,也需要記錄添加先後順序,才選擇使用LinkedHashSet.
底層採用紅黑樹算法(樹結構,比較擅長做範圍查詢).
TreeSet要麼採用自然排序,要麼定製排序.
自然排序: 要求在TreeSet集合中的對象必須實現java.lang.Comparable接口,並覆蓋compareTo方法.
定製排序: 要求在構建TreeSet對象的時候,傳入一個比較器對象(必須實現java.lang.Comparator接口).
在比較器中覆蓋compare方法,並編寫比較規則.
TreeSet判斷元素對象重複的規則:
compareTo/compare方法是否返回0.如果返回0,則視爲是同一個對象.
-----------------------------------------------------------------------------
HashSet做等值查詢效率高,TreeSet做範圍查詢效率高.
而我們更多的情況,都是做等值查詢, 在數據庫的索引中做範圍查詢較多,所以樹結構主要用於做索引,用來提高查詢效率.