第一部分: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的相关实现。