1. 程式人生 > >Set/HashSet/LinkedHashSet/TreeSet

Set/HashSet/LinkedHashSet/TreeSet

HashSet

應用場景:資料去重複
繼承關係:HashSet繼承於AbstractSet,AbstractSet繼承於AbstractCollection實現了Set,克隆,有序化介面.
特點:
資料重複性:不能重複,底層基於HashMap,HashSet儲存的值就是HashMap的Key,所以是不能重複的
null值處理:只能儲存一個null值
只能儲存單個數據,HashSet的底層是HashMap,HashSet用一個物件儲存在所有的value中,所以只能key值儲存資料.
資料有序性:無序的

常用方法:
contains(Key):傳入的是一個key,底層呼叫map.containsKey方法.(返回是否含有)
add(e):傳入的作為key,value統一用PRESENT遍歷,底層呼叫map.put方法(返回插入的是否為null)
remove(e):傳入的作為key,底層呼叫map.remove方法(返回移除的是否為PRESENT)
removeAll(<?> c):傳入的是一個集合,在當前集合中移除與傳入集合相同的資料
addAll(<?> c):傳入的是一個集合,把傳入的集合中所有資料新增到當前集合中
retainAll(<?> c):在當前集合中只保留 既存在於傳入集合,也存在於當前集合的資料(求交集)
遍歷方式

:底層呼叫的是HashMap的keySet的迭代器
底層資料結構:是一個HashMap
建構函式:
1.預設的,直接新建立一個HashMap,都用的是預設值.
2.引數是自定義的 初始容量和載入因子
3.引數是自定義的初始容量,載入因子是預設值0.75
4.引數是自定義的初始容量,載入因子,和一個boolean值
5.引數是一個集合
屬性;
private static final Object型別的PRESENT 只是用作虛擬的value進行儲存
HashMap 型別的 map
增長方式:
類似於HashMap的二倍擴容

LinkedHashSet

繼承關係:類似於HashSet

建構函式:和HashSet一樣,底層呼叫的是父類HashSet帶三個引數的建構函式,並且第三個值預設都為true,即按照插入有序

實現訪問有序是如何實現的?
底層的四個建構函式,都是呼叫super(HashSet)的建構函式帶三個引數的建構函式,導致map為LinkedHashMap,而LinkedHashMap的accessOrder為true,就是訪問有序

TreeSet

底層封裝的是一個TreeMap.
能夠實現資料排序,如何實現排序??
1.自然排序,
讓元素所屬的類實現Comparable介面
在類中重寫Comparable的抽象方法compare To()
2.建立比較器類
實現Comparator介面
重寫compare方法
3.建立匿名物件類