当前位置: 首页 > article >正文

【从零开始学Java | 第二十五篇】TreeSet

目录前言一、TreeSet的特点二、TreeSet集合默认的规则1.默认排序/自然排序2.比较器排序总结前言在 Java 的集合框架中Set接口代表了一个不允许存在重复元素的集合。我们最常用的通常是HashSet因为它提供了极高的查找和插入效率。但是当我们不仅需要去重还需要保证集合元素有序时TreeSet就成了不二之选。一、TreeSet的特点不重复、无索引、可排序可排序按照元素的默认规则由小到大进行排序。TreeSet集合底层是基于红黑树的数据结构实现排序的增删改查性能都比较好。排序的具体场景public class Test { public static void main(String[] args) { TreeSetInteger ts new TreeSet(); ts.add(5); ts.add(3); ts.add(2); ts.add(1); ts.add(4); System.out.println(ts); //迭代器遍历 IteratorInteger it ts.iterator(); while(it.hasNext()){ int i it.next(); System.out.println(i); } //增强for遍历 for (Integer i : ts) { System.out.println(i); } //Lambda表达式遍历 ts.forEach(integer- System.out.println(integer)); } }二、TreeSet集合默认的规则对于数值类型Integer、Double默认是按照数字的从小到大的顺序进行排序。对于字符、字符串类型按照字符在ASCII码表中的数字进行升序排序的。对于“aaa”、“ab”这两个字符串在对比时跟字符串的长度是无关的对比规则为从第一个字符开始对应比较一旦有一个字符能够确定大小关系那么整个字符串的大小关系也随之确定。1.默认排序/自然排序JavaBean类实现Comparable接口指定比较规则。当我们存入引用类型数据时会发生什么Student JavaBean类public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { this.name name; this.age age; } /** * 获取 * return name */ public String getName() { return name; } /** * 设置 * param name */ public void setName(String name) { this.name name; } /** * 获取 * return age */ public int getAge() { return age; } /** * 设置 * param age */ public void setAge(int age) { this.age age; } public String toString() { return Student{name name , age age }; } }当我们直接添加、打印输出时会发生什么由于编译器并不知道根据什么来排序因此会报错。解决方法我们需要在Student类中重写compareTo方法。运行结果compareTo方法this表示当前要添加的元素。o表示已经存在于红黑树的元素。返回值负数认为要添加的元素是小的存左边。正数认为要添加的元素是大的存右边。0认为要添加的元素已经存在舍弃。2.比较器排序创建TreeSet对象时传递比较器Comparator指定规则。public class Test { public static void main(String[] args) { TreeSetString ts new TreeSet(new ComparatorString() { Override public int compare(String o1, String o2) { return 0; } }); } }案例存入字符串c、ab、df、qwer按照长度排序如果一样长则按照首字母排序。public class Test { public static void main(String[] args) { TreeSetString ts new TreeSet(new ComparatorString() { Override public int compare(String o1, String o2) { //按长度排序 int i o1.length() - o2.length(); int result i 0 ? o1.compareTo(o2) : i; return result; } }); ts.add(c); ts.add(ab); ts.add(qwer); ts.add(df); System.out.println(ts); } }运行结果总结TreeSet集合的特点可排序、不重复、无索引底层基于红黑树实现排序增删改查性能好TreeSet集合自定义排序规则方式一JavaBean类实现Comparable接口指定比较规则。方式二创建集合时自定义Comparator比较器对象指定比较规则。方法返回值的特点负数认为要添加的元素是小的存左边。正数认为要添加的元素是大的存右边。0认为要添加的元素已经存在舍弃。

相关文章:

【从零开始学Java | 第二十五篇】TreeSet

目录 前言 一、TreeSet的特点 二、TreeSet集合默认的规则 1.默认排序/自然排序 2.比较器排序 总结 前言 在 Java 的集合框架中,Set 接口代表了一个不允许存在重复元素的集合。我们最常用的通常是 HashSet,因为它提供了极高的查找和插入效率。但是&…...

openclaw源码

https://github.com/openclaw/openclaw https://github.com/VoltAgent/awesome-openclaw-skills/tree/main/categories...

优峰技术 1550nm 可调谐激光器:全光纤型分支器件检测核心光源

全光纤型分支器件是光纤通信、光纤传感网络的核心无源元件,其插入损耗、回波损耗、偏振相关损耗、分光比均匀性等关键指标,直接决定光网络传输质量与稳定性。在全光纤型分支器件检测体系中,1550nm可调谐激光器作为高精度测试光源,…...

魔方财务批量拉取产品信息教程

使用魔方财务,有时候经常上级【变化了ip】或者批量【补时间】什么的,我们这里因为我们的财务换过域名,导致上级无法给我们推送需要我们手动拉取信息,一个两个还好,几百个怎么办? 本教程就是【欧云服务器】…...

驾校招生断崖式下跌?这3个数据驱动的获客策略,让报名量翻倍

驾校招生断崖式下跌?这3个数据驱动的获客策略,让报名量翻倍最近和几位驾校校长聊天,听到最多的感慨是:“以前学员排队等车,现在教练排队等学员。”这不是个别现象。某地驾培协会数据显示,2023年区域性驾校平…...

基于单片机的婴儿看护系统设计

一、摘要 本课论文构思并实现了一种基于STM32F103C8T6单片机的智能婴儿看护系统婴儿看护系统,该系统致力于为婴儿提供全方位的监测与智能婴儿看护系统化的照护服务。它巧妙地融合了DHT11温湿度传感器、声音传感器以及液体传感器,这些传感器协同工作&…...

​Problem - 2148F - Codeforces​[字符串后缀排序]

Problem - 2148F - Codeforces 题意很简单 我们可以随意防止字符串 按照从上到下 如果最后一层某个位置没有字符串 那么上面的字符串就会掉下来到最后一层 求字典序最小的最下层的字符串 首先 最朴素的思想 我们会找出当前最小长度的字符串 长度k 然后截取所有字符串的…...

国产SeekWave 双频WIFI6+BT5.4 VS6621SR80基于RK3588平台成功替换RTL8822模组 硬件兼容 速率可达600Mbps

RK3588是瑞芯微(Rockchip)推出的旗舰级SoC芯片,采用8nm工艺,集成‌四核Cortex-A76和四核Cortex-A55 CPU、ARM Mali-G610 MP4 GPU、6 TOPS NPU‌,支持8K视频编解码。‌‌1‌‌2‌CPU‌:八核ARM架构&#xff…...

解锁论文写作新境界:书匠策AI——学术探索的智能导航灯

在学术的浩瀚海洋中,每一位研究者、学生乃至教育博主,都如同勇敢的航海家,驾驶着知识的船只,追寻着真理的彼岸。然而,论文写作这一航程中的关键环节,往往让许多人感到迷茫与挑战重重。今天,就让…...

GHelper终极指南:用轻量化工具彻底替代Armoury Crate,释放华硕ROG笔记本全部性能!

GHelper终极指南:用轻量化工具彻底替代Armoury Crate,释放华硕ROG笔记本全部性能! 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RG…...

c++入门:函数实参形参傻傻分不清?如何改变实参!

值传递是 C 中最基本的参数传递方式。它的核心意思是:当你把一个变量作为参数传给函数时,函数得到的是这个变量的一个副本,而不是变量本身。所以在函数内部修改这个副本,外部的原变量纹丝不动。📦 举个生活例子你把一张…...

ObsPy完整指南:如何用Python快速处理地震数据

ObsPy完整指南:如何用Python快速处理地震数据 【免费下载链接】obspy ObsPy: A Python Toolbox for seismology/seismological observatories. 项目地址: https://gitcode.com/gh_mirrors/ob/obspy ObsPy是一个专为地震学和地震观测站设计的Python工具库&…...

怎样评估数据化管理?数据化管理如何持续改进?

在数据这个行当工作了这么多年,我经常会和不同公司的朋友聊天。大家刚开始做数据化管理时总是干劲十足,买工具、建报表、做大屏。但一两年后,常常陷入一种困惑:钱花了,屏挂了,但感觉业务还是老样子。这时候…...

夸克扫码登录

kefu16665...

【FastAPI】 响应类型详解:从默认 JSON 到自定义响应

FastAPI 响应类型详解:从默认 JSON 到自定义响应(HTML/文件/流/重定向) 一、FastAPI 响应机制概述 FastAPI 默认会将路径操作函数返回的 Python 对象(如 dict、list、Pydantic Model)自动转换为 JSON 格式,…...

all-MiniLM-L6-v2详细步骤:Ollama模型量化部署(Q4_K_M)显存再降40%

all-MiniLM-L6-v2详细步骤:Ollama模型量化部署(Q4_K_M)显存再降40% 在资源受限的环境中部署高效的句子嵌入模型一直是开发者的痛点。all-MiniLM-L6-v2作为轻量级语义表示模型,虽然已经比标准BERT模型小了80%以上,但在…...

工程师必备:高效阅读Datasheet的实用技巧

1. 为什么工程师必须掌握Datasheet阅读能力在嵌入式系统和硬件开发领域,Datasheet(数据手册)就是芯片的"使用说明书"。我从业十余年,见过太多工程师因为不会正确阅读Datasheet而踩坑的案例。有一次团队花了两个月调试一…...

XZ8011双节8.4V充电芯片 输入电压8.9-15V

XZ8011是一款完整的双节锂离子电池恒压恒流充电管理芯片。采用ESOP8封装形式,外加很少的外部元件,使其成为便携应用的理想选择。 XZ8011通过外接电流检测电阻即可实现高精度的充电电流。其内部有热反馈电路可以对在充电过程中对芯片温度加以控制。充电截…...

全双工和半双工的区别

全双工和半双工是描述通信双方数据流动方向的两种基本模式,它们决定了通信链路的利用率、硬件复杂度和应用场景。下面从定义、工作机制、典型协议、优缺点、实际应用五个方面展开。一、基本定义模式英文数据传输方向比喻单工Simplex单向,只能A→B&#x…...

从火柴盒到AI:探索MENACE的数字化旅程

在计算机科学的历史中,有许多有趣的实验和发明,其中之一便是由唐纳德米奇(Donald Michie)设计的“火柴盒计算机”(Matchbox Educable Noughts and Crosses Engine,简称MENACE)。这个装置使用了火柴盒和彩色珠子来模拟人工智能,教机器玩井字游戏(Tic-Tac-Toe)。本文将…...

单线程 Redis 的高性能之道

引言Redis 以单线程模型处理网络请求与命令操作,却能在高并发场景下保持惊人的吞吐能力。这背后离不开三大基石:全内存存储、高效数据结构(哈希表、跳表等)以及 epoll 多路复用机制,让单线程能够高效处理海量连接。 随…...

解决Python SocketIO客户端连接问题

引言 在构建一个IT自动化系统时,管理多个电脑的需求日益增强。为了实现这一目标,我采用了以下技术栈: 前端:React 后端****中间层:NodeJS 终端代理:Python 然而,在使用Python实现SocketIO客户端时,我遇到了一个问题:Python客户端无法正常打印连接成功的消息。本文将详…...

无缝跨平台体验:APK-Installer让Windows运行Android应用的革命性工具

无缝跨平台体验:APK-Installer让Windows运行Android应用的革命性工具 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化时代,用户常常面临…...

清明节海报设计指南:4个要点打造高级感视觉呈现

每到清明临近,总有人为海报设计发愁。想做一张既体面又有格调的清明节海报,打开设计软件却不知从何下手,勉强拼凑出来的效果又总觉得差点意思。要么太过花哨显得不够庄重,要么过于简陋显得敷衍。其实高级感并不难,关键…...

文件夹的修改日期可以改吗?分享你三个修改方法

在电脑文件管理中,系统不支持直接修改文件夹的「修改时间」,但日常整理文件、统一项目时间戳、还原备份文件夹时间、办公归档时,经常需要自定义修改这个属性。本文给大家整理了3 种实用方法:第一种是汇帮批量重命名工具&#xff0…...

FreeRTOS 工程化要点:任务划分、优先级设计与 CPU 占用率监控

大家好,我是杂烩君。 今天我们来简单分享:FreeRTOS任务怎么拆、优先级怎么配、CPU 占用怎么看。1. 任务划分原则 1.1 单一职责:一个任务只干一件事 把"串口接收 数据解析 指令执行 结果反馈"全塞一个任务,解析环节一…...

网站设计:抓住这3点细节,用户体验感飙升!

网站制作要不要做得那么细呢?实际上,当我们发现很多网站制作得很优秀时,怎么看都不知道是如何做好的,但就是感觉不错,实际上这就体现在了制作网站细节上。很多时候设计网站往往容易忽视这三个细节:1、网页图…...

V821 DISP 显示驱动流程分析

文章目录1、前言2、环境介绍3、大致流程4、程序阅读5、总结1、前言 在全志 V821 下调试 RGB 屏幕时,因为一直创建不出 fb 节点,这里记录一下当时阅读显示驱动框架的过程。仅供参考。 2、环境介绍 sdk:V821 tina sdk v1.3 3、大致流程 初…...

实验室服务器远程访问终极方案:SSH 反向隧道 + systemd 自动重连

🚀 实验室服务器远程访问终极方案:SSH 反向隧道 systemd 自动重连适用于: 没有公网 IP 的实验室服务器想用 VSCode / SSH / Jupyter 远程开发希望稳定、自动重连、开机自启🧠 一、问题背景 在很多实验室环境中: GPU 服…...

赋能智能体大脑:在快马平台中集成AI模型实现高级对话能力

在探索AI辅助开发的过程中,我发现智能体的核心能力很大程度上取决于其"大脑"——也就是背后支撑决策的AI模型。最近在InsCode(快马)平台实践了一个很有意思的项目:如何为智能体集成AI模型来实现高级对话功能。整个过程让我深刻体会到&#xff…...