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

本文深入探讨了Java集合框架中HashSet、LinkedHashSet及TreeSet的工作原理。详细解释了这些集合类如何利用HashMap、LinkedHashMap和TreeMap来实现元素的存储与快速检索,特别关注它们在保证数据唯一性的同时提供高效的操作。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值