JAVA集合6-TreeSet

介绍

TreeSet:基于红黑树实现的有序集合,按元素的自然顺序或自定义顺序排序。

TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("Item 1");
treeSet.add("Item 2");

TreeSet 的底层实现是基于 TreeMap 的,它实际上是通过 TreeMap 来实现的,只不过在 TreeSet 中只使用了 TreeMap 的键,而值则统一使用一个私有静态常量对象。

下面是 TreeSet 底层实现的简要分析:

  1. TreeMap:TreeSet 内部维护了一个 TreeMap 对象,作为存储元素的载体。
  2. 存储元素:当向 TreeSet 中添加元素时,实际上是将该元素作为 TreeMap 的键存储,而值则存储为一个私有静态常量对象,比如 private static final Object PRESENT = new Object()
  3. 排序:TreeSet 中的元素会按照它们的自然顺序或者通过提供的 Comparator 进行排序。TreeSet 会利用 TreeMap 的红黑树实现来保持元素的有序性。
  4. 去重:由于 TreeMap 的键是唯一的,因此 TreeSet 中不会有重复元素。TreeSet 利用 TreeMap 键的唯一性来保证其中不会有重复元素。
  5. 查找:当调用 TreeSet 的 contains() 方法时,实际上是调用了 TreeMap 的 containsKey() 方法来判断元素是否存在。

由于 TreeSet 的底层是基于 TreeMap 实现的,因此具有 TreeMap 的特性,如元素的自动排序、高效的插入和检索操作(平均情况下为 O(log n)),以及去重功能。不过需要注意的是,TreeSet 并不保证元素的顺序,它是根据元素的比较规则来进行排序的。

常用方法:

  1. add(E e):向 TreeSet 中添加元素。

    TreeSet<String> treeSet = new TreeSet<>();
    treeSet.add("Apple");
    treeSet.add("Banana");
    
  2. remove(Object o):移除 TreeSet 中的指定元素。

    treeSet.remove("Apple");
    
  3. contains(Object o):判断 TreeSet 是否包含指定元素。

    boolean containsBanana = treeSet.contains("Banana");
    
  4. size():返回 TreeSet 的大小(元素数量)。

    int size = treeSet.size();
    
  5. isEmpty():判断 TreeSet 是否为空。

    boolean isEmpty = treeSet.isEmpty();
    
  6. clear():清空 TreeSet 中的所有元素。

    treeSet.clear();
    
  7. first():返回 TreeSet 的第一个(最小)元素。

    String first = treeSet.first();
    
  8. last():返回 TreeSet 的最后一个(最大)元素。

    String last = treeSet.last();
    
  9. lower(E e):返回小于指定元素的最大元素。

    String lower = treeSet.lower("Banana"); // 返回 "Apple"
    
  10. higher(E e):返回大于指定元素的最小元素。

    String higher = treeSet.higher("Apple"); // 返回 "Banana"
    
  11. floor(E e):返回小于等于指定元素的最大元素。

    String floor = treeSet.floor("Banana"); // 返回 "Banana"
    
  12. ceiling(E e):返回大于等于指定元素的最小元素。

    String ceiling = treeSet.ceiling("Banana"); // 返回 "Banana"
    
  13. pollFirst():移除并返回 TreeSet 的第一个(最小)元素。

    String first = treeSet.pollFirst();
    
  14. pollLast():移除并返回 TreeSet 的最后一个(最大)元素。

    String last = treeSet.pollLast();
    
  15. iterator():返回 TreeSet 的迭代器,用于遍历集合中的元素。

    Iterator<String> iterator = treeSet.iterator();
    while(iterator.hasNext()) {System.out.println(iterator.next());
    }
    
  16. descendingIterator():返回逆序迭代器,从大到小遍历元素。

    Iterator<String> descendingIterator = treeSet.descendingIterator();
    while(descendingIterator.hasNext()) {System.out.println(descendingIterator.next());
    }
    

这些方法使得 TreeSet 成为一个功能丰富、灵活的有序集合类,可以方便地对元素进行添加、删除、查找和遍历操作。

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

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

相关文章

土地利用数据分类过程教学/土地利用分类/遥感解译/土地利用获取来源介绍/地理数据获取

本篇主要介绍如何对影像数据进行分类解译&#xff0c;及过程教学&#xff0c;示例数据下载链接&#xff1a;数据下载链接 一、背景介绍 土地是人类赖以生存与发展的重要资源和物质保障&#xff0c;在“人口&#xff0d;资源&#xff0d;环境&#xff0d;发展&#x…

Resilience4J之隔离(BulkHead)

Resilience4J之隔离(BulkHead) 中文官网https://github.com/lmhmhl/Resilience4j-Guides-Chinese/blob/main/core-modules/bulkhead.md 作用是&#xff1a;限制并发。 依赖隔离&负载保护&#xff1a;用于限制对于下游服务的最大并发数量的限制 maven依赖 <!--resil…

华为OD机试“HJ12 字符串反转”Java编程解答

描述 接受一个只包含小写字母的字符串&#xff0c;然后输出该字符串反转后的字符串。&#xff08;字符串长度不超过1000&#xff09; 输入描述&#xff1a; 输入一行&#xff0c;为一个只包含小写字母的字符串。 输出描述&#xff1a; 输出该字符串反转后的字符串。 示例…

npm证书过期问题

当我们在安装某些东西的时候&#xff0c;终端会报错: npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/js-md5 failed, reason: certificate has expirednpm ERR! A complete log of this run can be f…

最强模型Claude 3 Haiku速通指南在此!保姆级教学拿脚都能学会!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

Hack The Box-Perfection

目录 信息收集 nmap dirsearch gobuster whatweb WEB 信息收集 ffuf 漏洞探索 漏洞发现 模板注入 反弹shell 提权 get user and flag 信息收集 ssh登录&get root and flag 信息收集 nmap 端口探测┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10…

Java学习笔记005——接口的继承与实现

正如类之间可以继承&#xff0c;一个接口也可以继承另一个接口。Java为了避免多重继承带来的基类方法调用冲突的问题&#xff0c;Java只允许类的单继承&#xff0c;但允许接口的多继承。 1、接口的继承&#xff1a;更应该称为扩展。 &#xff08;1&#xff09;Animal.java&am…

C++之析构函数

在 C 中&#xff0c;析构函数&#xff08;Destructor&#xff09;是一个特殊的成员函数&#xff0c;用于在对象生命周期结束时执行清理工作和资源释放。析构函数的名称与类名相同&#xff0c;前面加上波浪号&#xff08;~&#xff09;&#xff0c;不接受任何参数&#xff0c;也…

[R] ggplot2 - exercise (“fill =“)

We have made the plots like: Lets practice with what we have learnt in: [R] How to communicate with your data? - ggplot2-CSDN博客https://blog.csdn.net/m0_74331272/article/details/136513694 #tutorial 5 -script #Exercise 1 #1.1# ggplot(smoking_and_drug_use_…

微信小程序开发系列(八)·微信小程序页面的划分以及轮播图区域的绘制和图片的添加

目录 1. 划分页面结构 2. 轮播图区域绘制 3. 轮播图图片添加 1. 划分页面结构 最终我们想达到如下效果&#xff1a; 其页面分为四层结构&#xff0c;因此我们需要配置四块view&#xff0c;代码如下&#xff1a; <!-- view 小程序提供的容器组件&#xff0c;可以当成…

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度&#xff0c;为什么这么说呢&#xff0c;举个例子&#xff1a; 在做分类的训练的时候&#xff0c;如果一个样本属于第K类&#xff0c;那么这个类别所对应的输出节点的输出值应…

支持国密的 Web 服务器

目录 前言编译 Nginx-with-GmSSLv3安装编译依赖的包下载源码编译代码配置与运行数字证书的生成与配置Nginx配置文件修改运行 Nginx-with-GmSSLv3测试Nginx小结前言 在上一章ARM 架构下国密算法库中,介绍了在银河麒麟系统 ARM 架构下编译国密库 GmSSL,在本章中,我将介绍集成…

96、C++ 性能优化一览

在对 C++ 版本的 resnet50 经过大约 5 个版本的优化之后,性能也基本达到了预期。至少利用手写的 resnet50 在 CPU 上推理一张图片感觉不到卡顿了。 下面对这几个版本的性能优化做一个总结。 初始版本1 第一版本的 C++ 代码,并没有考虑性能问题,仅仅是想按照手写 resnet50 …

操作系统原理与实验——实验四短进程优先调度

实验指南 运行环境&#xff1a; Dev c 算法思想&#xff1a; 短进程优先 (SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程&#xff0c;将处理机分配给它&#xff0c;使它立即执行并一直执行到完成 核心数据结构&#xff1a; typedef struct data{ int hour; int…

Docker镜像操作介绍

一、镜像操作 镜像的操作可分为&#xff1a; 拉取镜像&#xff1a;拉取远程仓库的镜像到本地 docker pull重命名镜像&#xff1a;使用docker tag 命令重命名镜像查看镜像&#xff1a;使用docker image ls 或者 docker images命令查看本地已经存在的镜像删除镜像&#xff1a;删…

蓝桥杯倒计时 38 天

整数二分模板&#xff1a;数的范围 二分的本质不是单调性&#xff0c;而是二分出能满足某种性质使得将整数分成两半。 思考&#xff1a;模板题&#xff0c;模板记熟就能做 #include<iostream> using namespace std; int n,q; const int N 1e510; int a[N]; int main…

Jenkins 将shell脚本启动方式修改为bash

platform"arm x86" if [[ "$platform" ~ "arm" ]] thenecho "arm" fi最近在调试Jenkins实现的一些功能&#xff0c;发现在本地可以运行的脚本内容到了Jenkins里面就没办法运行了&#xff0c;不是提示unexpected operator就是提示[[ : …

Python 系统学习总结(基础语法+函数+数据容器+文件+异常+包+面向对象)

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 六天时间系统学习Python基础总结&#xff0c;目前不包括可视化部分&#xff0c;其他部分基本齐全&#xff0c;总结记录&#xff0…

网络编程 24/3/6 作业

1、数据库的增删改 #include <myhead.h> int main(int argc, const char *argv[]) {//定义数据库句柄指针sqlite3 *kdbNULL;//打开数据库&#xff0c;不存在则创建if(sqlite3_open("./my.db",&kdb)!SQLITE_OK){printf("sqlite3_open error\n");…

Golang-如何优雅的关闭一个Channel?

如何优雅的关闭Channel 这部分主要参考自&#xff1a;https://qcrao91.gitbook.io/go/channel/ru-he-you-ya-di-guan-bi-channel 直接关闭存在的问题 主要就是上述“向已关闭的Channel收发&#xff0c;会如何&#xff1f;”中所提到的情况&#xff1a; 1、向已关闭的channel…