TreeSet源码分析

news2024/11/23 2:23:00

概述

TreeSet ,基于 TreeSet 的 Set 实现类。在业务中,如果我们有排重+ 排序的需求,一般会考虑使用 TreeSet

#TreeSet的继承关系
在这里插入图片描述

TreeSet的内部属性

在这里插入图片描述

m 的 key ,存储 HashSet 的每个 key 。
map 的 value ,因为 TreeSet 没有 value 的需要,所以使用一个统一的 PRESENT

构造方法

// TreeSet.java

TreeSet(NavigableMap<E,Object> m) {
    this.m = m;
}

public TreeSet() {
    this(new TreeMap<>());
}

public TreeSet(Comparator<? super E> comparator) {
    this(new TreeMap<>(comparator));
}

public TreeSet(Collection<? extends E> c) {
    this();
    // 批量添加
    addAll(c);
}

public TreeSet(SortedSet<E> s) {
    this(s.comparator());
    // 批量添加
    addAll(s);
}

添加元素

public boolean add(E e) {
    return m.put(e, PRESENT)==null;
}

m 的value值就是。private static final Object PRESENT = new Object();
是一个final类型的value,所有的key的value都是一样的

移除元素


public boolean remove(Object o) {
    return m.remove(o)==PRESENT;
}

查找单个元素

public boolean contains(Object o) {
    return m.containsKey(o);
}

查找接近的元素

在 NavigableSet 中,定义了四个查找接近的元素:
#lower(E e) 方法,小于 e 的 key
#floor(E e) 方法,小于等于 e 的 key
#higher(E e) 方法,大于 e 的 key
#ceiling(E e) 方法,大于等于 e 的 key

// TreeSet.java

public E lower(E e) {
    return m.lowerKey(e);
}

public E floor(E e) {
    return m.floorKey(e);
}

public E ceiling(E e) {
    return m.ceilingKey(e);
}

public E higher(E e) {
    return m.higherKey(e);
}

SortedMap中提供了获取首尾元素的功能

first() 方法,获得首个 key


public E first() {
    return m.firstKey();
}

pollFirst() 方法,获得并移除首个 key

public E pollFirst() {
    Map.Entry<E,?> e = m.pollFirstEntry();
    return (e == null) ? null : e.getKey();
}

last() 方法,获得尾部 key

public E last() {
    return m.lastKey();
}

pollLast() 方法,获得并移除尾部 key

public E pollLast() {
    Map.Entry<E,?> e = m.pollLastEntry();
    return (e == null) ? null : e.getKey();
}

总结

》TreeSet 是基于 TreeMap 的 Set 实现类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DJ5-3 多路访问链路和协议

目录 一、网络链路 二、广播信道要解决问题 三、多路访问协议 1、基本介绍 2、多路访问协议的类型&#xff08;3&#xff09; 四、信道划分协议 1、时分多路访问 TDMA 2、频分多路访问 FDMA 3、码分多路访问 CDMA&#xff08;略&#xff09; 五、随机访问协议 1、纯…

基于AD96808 FMC 模块,支持8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能

板卡概述 FMC-XM148 是一款基于VITA57.4 标准的JESD204B 接口FMC 子卡模块&#xff0c;该模块可以实现8 路14-bit、500MSPS/1GSPS/1.25GSPSADC 采集功能。该板卡ADC 器件采用ADI 公司的AD9680 芯片,全功率-3dB 模拟输入带宽可达2GHz。该ADC 与FPGA 的主机接口通过16 通道的高速…

ThingsBoard自定义分发节点duplicate to related

------------------------------------内容仅博主所有,订阅者请勿泄露,感谢--------------------- 1、概述 大家好,我又更新干货了,还是那句话,我绝不像某些博主“拿我格子衫”分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享Th…

高端制造业国产化是未来高质量发展的必经之路

在当前全球经济的大背景下&#xff0c;高端制造业已成为各国竞争的焦点。中国作为世界第二大经济体&#xff0c;也在高端制造业领域发挥着越来越重要的作用。然而&#xff0c;我们必须清醒地认识到&#xff0c;目前我国高端制造业的发展还面临着一些困难和挑战&#xff0c;其中…

国产高性能DSP音频处理芯片的工作原理以及应用领域

DSP芯片是数字信号处理器的简称&#xff0c;它是一种专门用于数字信号处理的微处理器&#xff0c;它可以对数字信号进行高速运算和处理。DSP是一类嵌入式通用可编程微处理器&#xff0c;主要用于实现对信号的采集、识别、变换、增强、控制等算法处理&#xff0c;是各类嵌入式系…

ChatGPT 高效对话-学习使用提示语Prompts​

我们整理了一些可以帮助你学习如何使用ChatGPT的资源&#xff0c;包括吴恩达教授最新推出的官方ChatGPT提示词工程师课程的中文B站视频资源&#xff0c;一些插件、使用ChatGPT的标准范式等。 我们将这些所有的相关网址收录到 webhub123 ChatGPT 高效对话-学习使用提示语Promp…

【LeetCode】326. 3 的幂

326. 3 的幂&#xff08;简单&#xff09; 方法一&#xff1a;试除法 思路 我们可以先进行特殊点判断&#xff0c;n < 0 的数都不可能是 3 的幂次方。接着&#xff0c;当 n > 0 且 n 能被 3 整除 时&#xff0c;我们对其整除 3 &#xff0c;直到该条件不满足&#xff…

MyBatis之缓存机制

缓存即为存在内存中的临时数据.将用户经常查询的数据存放在缓存(内存)中,用户去查询数据就不用去每次去数据库中查询,而是去缓存中查询,从而提高了查询的效率,解决了高并发系统的性能问题.MyBatis提供了两种缓存机制&#xff1a;一级缓存&#xff08;本地&#xff09;和二级缓存…

thinkphp6 消息队列think-queue(完整版)

1.安装队列依赖 如果是在Linux上&#xff0c;进入thinkphp项目的think文件所在目录&#xff0c;执行安装命令 composer require topthink/think-queue 2.修改queue的配置文件&#xff0c;文件位置config/queue.php(安装成功后自动生成) <?php return [default >…

Python实现ACO蚁群优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁群优化算法(Ant Colony Optimization, ACO)是一种源于大自然生物世界的新的仿生进化算法&#xff0c…

Layui layer 弹出层的使用【笔记】

Layui layer 弹出层的使用 首先&#xff0c;为了方便直接通过在线cdn引入对应的css和js <!-- 引入 layui.css --> <link href"//unpkg.com/layui2.8.0/dist/css/layui.css" rel"stylesheet"> <!-- 引入 layui.js --> <script src&…

来自非985211的普通本科的Android面试题分享【网络安全】

文中附有详细的面试真题目&#xff0c;文末有我当时刷的面试真题还有一些对我帮助良多的复习资料&#xff0c;特别有用&#xff0c;希望也可以帮大家顺利上岸&#xff0c;顺便攒攒人品&#xff01; 个人的基本情况 本人出生在一个普通家庭&#xff0c;自身学历很一般&#xff…

现在的00后,真是卷死了呀,辞职信已经写好了·····

都说00后躺平了&#xff0c;但是有一说一&#xff0c;该卷的还是卷。这不&#xff0c;三月份春招我们公司来了个00后&#xff0c;工作没两年&#xff0c;跳槽到我们公司起薪23K&#xff0c;都快接近我了。 后来才知道人家是个卷王&#xff0c;从早干到晚就差搬张床到工位睡觉了…

【taro react】---- 解决开发环境微信小程序由于主包体积过大不能预览问题

1. 开发环境代码包大小 注意:可以看到此时主包加分包将近 5MB,上传预览将会超出限制!!! 2. 预览结果 报错:代码包大小超过限制,主包资源近3MB,限制最大2MB!!! 3. 解决办法 使用webpack的压缩插件,在开发环境编译的时候进行压缩;进行分包处理,同时依赖也进行分包处…

冲刺618:新品变爆品,品牌如何提炼差异化卖点?

纵观2023年品牌生态&#xff0c;大牌强势、新锐崛起。618大促将至&#xff0c;当前市场营销内容同质化严重&#xff0c;如何占领用户心智&#xff0c;成为品牌营销的“考题”之一。千瓜&#xff5c;谦果营销 结合小红书品牌推广实操经验&#xff0c;沉淀总结品牌差异化卖点提炼…

OpenText Exceed TurboX 桌面虚拟化解决方案整合数据中心、提供高端图形显示

突出特点 2D 和 3D 图形应用程序的卓越性能远程访问&#xff1b; 全球团队的强大协作&#xff1b; 高级安全和集中管理&#xff1b; 从 MicrosoftWindows、Mac、Linux 或 iPad 远程访问。 企业正在寻求整合数据中心&#xff0c;达到减少 IT 支出并提高中央可管理性的目的。 同…

决策反馈均衡器介绍

参考链接&#xff1a;https://www.163.com/dy/article/GK6BBSEB0531PW97.html https://zhuanlan.zhihu.com/p/477141677 DFE全称为Decision Feedback Equalizer&#xff0c;即决策反馈均衡器。它是一种电信通信系统中常用的均衡器&#xff0c;在接收信号端实现等化器、滤波器和…

Selenium入门必备:学会用代码控制浏览器,打开网页、找到元素和退出浏览器

目录 一、前期准备 1、概述 2、学习目标 3、安装 二、selenium的基本使用 1、加载网页&#xff1a; 2、定位和操作&#xff1a; 3、查看请求信息&#xff1a; 4、退出 小结 三、元素定位的方法 学习目标 1、selenium的定位操作 2、元素的操作 小结 四、seleniu…

ThingsBoard 场景联动需求

0、需求 1、概述 当初有个兄弟请我帮他实现一个需求,需求如上,很简单,实现完成后我怕他操作不来,又写了这份文档给他,今天把这个文档的场景发出来,大家也可以学习一下思路 2、登录账号 系统层: 账号:sysadmin@thingsboard.org 密码:sysadmin 3、创建租户 新建租户…

MS COCO数据集介绍

MS COCO数据集介绍 MS COCO全称是Microsoft Common Objects in Context&#xff0c;是由微软开发维护的大型图像数据集&#xff0c;包括不同检测任务&#xff1a; Object Detection&#xff08;[主要处理人、车、大象等]&#xff09; DensePose&#xff08;姿态密度检测&…