JDK源码学习(6)-java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet

时间:2022-01-19 17:53:54

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