第一部分:java.util.HashSet
該類型主要是依賴於HashMap,即HashSet的元素爲HashMap的key,而HashMap的value爲一個常量Object對象代替。
具體代碼如下:
public HashSet() { map = new HashMap<>(); } public int size() { return map.size(); } public boolean isEmpty() { return map.isEmpty(); } public boolean contains(Object o) { return map.containsKey(o); } public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolean remove(Object o) { return map.remove(o)==PRESENT; } public void clear() { map.clear(); }
即HashSet的基本操作都是HashMap關於key的基本操作。因此,HashSet的節點會直接去重。
第二部分:java.util.LinkedHashSet
LinkedHashSet依賴於LinkedHashMap,即key在衝突時存放的數據結構爲雙向鏈表,並且會將新進行插入操作的key存放到鏈表末尾位置,實現最近操作在最容易找到的位置。
同樣的,java.util.TreeSet也是依賴於TreeMap的相關實現。