Set接口無序(意味著不能通過下標讀取)雁仲,并且不允許重復元素葵腹。與Set接口相關(guān)的部分UML類圖如下:
其主要實現(xiàn)類為:HashSet、LinkedHashSet松邪、TreeSet。
HashSet
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
1哨查、HashSet內(nèi)部使用HashMap逗抑,HashSet集合內(nèi)部所有的操作基本上都是基于HashMap實現(xiàn)的,所以HashSet中的元素是無序的寒亥。
2邮府、HashSet中的元素作為HashMap的 key,value就是這個 PRESENT 溉奕。
LinkedHashSet
1褂傀、LinkedHashSet繼自HashSet,其構(gòu)造時調(diào)用HashSet的構(gòu)造方法加勤,但是內(nèi)部卻是用的LinkedHashMap仙辟。
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
2、它跟HashSet一樣鳄梅,把value做為一個dummy的object叠国,然后結(jié)合key元素,放入LinkedHashMap里戴尸。
TreeSet
1粟焊、TreeSet實現(xiàn)的是NavigableSet接口,但NavigableSet接口繼承自SortedSet接口孙蒙,SortedSet接口繼承自Set接口项棠。
2、TreeSet雖然使用的是NavigableMap挎峦,但無參構(gòu)造函數(shù)里香追,NavigableMap便是TreeMap。
private transient NavigableMap<E, Object> backingMap;
public TreeSet() {
backingMap = new TreeMap<E, Object>();
}