TreeSet分析

1. |——SortedSet接口——TreeSet实现类
Set接口-|——HashSet实现类
|——LinkedHashSet实现类
我们知道Set接口不保证集合的迭代顺序,TreeSet的出现弥补了这一问题,根据使用的构造
方法不同,可能会按照元素的自然顺序进行排序,或按照在创建 set 时所提供的比较器进行排序。让我们来看一个小例子

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;


public class TreeSetTest {

public static void main(String[] args) {
TreeSet set = new TreeSet(new PersonComparator());
Person person1 = new Person(20);
Person person2 = new Person(40);
Person person3 = new Person(30);
Person person4 = new Person(10);
set.add(person1);
set.add(person2);
set.add(person3);
set.add(person4);

for(Iterator it = set.iterator();it.hasNext();){
Person person = (Person)it.next();
System.out.println(person.getScore());
}

//我们可以根据自己定义的比较器来取得集合的最大对象
System.out.println(Collections.max(set,new PersonComparator()));
}

}

class Person {
private int score;
public Person(int score){
this.score = score;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}

@Override
public String toString() {
return String.valueOf(this.score);
}

//重写equals方法和hashCode方法,避免集合中出现属性值相同的对象
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + score;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Person other = (Person) obj;
if (score != other.score)
return false;
return true;
}
}

class PersonComparator implements Comparator{

public int compare(Object o1, Object o2) {
Person person1 = (Person)o1;
Person person2 = (Person)o2;
//按照score的值升序排序
return person1.getScore() - person2.getScore();
}

}


当然HashSet是基于Hash算法实现的,其性能通常优于TreeSet,我们通常都应该使用HashSet,在我们需要排序的功能时,我门才使用TreeSet
【CAPL实用开发】--- 使用VN1640A测试Busoff快慢恢复 使用VN1640A测试Busoff快慢恢复,包含具体的CAPL代码实现。 阅读详情

相关推荐

STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成

本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。

palm99的专栏 748

TreeSet解析

TreeSet实际上是TreeMap实现的,所以底层结构也是红黑树。TreeSet不需要重写hashCode()和euqals()方法,因为它去重是依靠比较器来去重,因为结构是红黑树,所以每次插入都会遍历比较来寻找节点插入位置,如果发现某个节点的值是一样的那就会直接覆盖。当我们构造TreeSet时;若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。TreeSet是非线程安全的。...

weixin_47382783的博客 3851

NVIDIA Jetson Orin系列 - 使用SDK Manager安装JetPack全流程解析

本文详细解析了使用NVIDIA官方SDK Manager为Jetson Orin系列开发板安装JetPack系统的完整流程。从环境准备、设备进入恢复模式,到SDK Manager图形化界面的分步操作指南,提供了新手友好的全流程解析,并分享了安装后的验证方法及常见问题解决方案,帮助开发者高效搭建稳定的边缘AI开发环境。

nn3456的博客 406

java 集合之TreeSet详解

首先说明一下,之前看了一下文章提出TreeSet在添加第一个元素的时候是不比较大小的,这种说发是错误的,在第一次添加的时候比较的是第一个对象本省返回的参数是0,下面我们用程序验证一下:首先由一个Student的内部类:里面有两个参数,年龄和名称我们后期自定义排序也是用得到的。然后我们把这个对象添加到TreeSet中,构建一个无参数的TreeSet。这样添加我们是能看到程序报错:然后我们写一个自定义...

zhaojie181711的博客 4万+

ROS2仿真抓取分拣案例,使用myCobot 280机械臂结合ROS2系统搭建机械分拣站

本案例展示了如何利用myCobot 280 urdf模型构建一个对象分类站,并在ROS2 jazzy中完成运动规划。

m0_71627844的博客 2125

国际项目投标那些事(三)海外项目招标文件的组成

以一个实际的项目作为例子,是我2020年初投的一个东南亚国家的水厂的竞争性投标。这个投标的招标基于FIDIC yellow book (Design and Build) 合同模板。 海外项目的招标一般是有专门的咨询公司(consulting engineer)写招标文件,有的咨询公司非常专业,对于技术、合同、业绩的要求非常细致。 我这个项目的招标文件共5册 400多页(全英文),附件26册将...

WTSolutions的博客 2003

Set--TreeSet实现分析

TreeSet对于实现了Comparable接口的对象或者comparator中的对象可以自动排序。 最基本的构造函数:所有面向外部的构造函数都会调用这个构造函数,初始化NavigableMap TreeSet(NavigableMap m) { this.m = m; } 利用对象Comparable接口进行排序的构造函数:利用TreeMap中的keys保存对象

yb3232的博客 453

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理精讲,阐述滑模观测器核心思想和PLL的作用;2)系统架构全景图展示;3)Simulink建模全流程,从基础FOC框架到SMO和PLL模块的实现;4)关键参数整定指南和工程实践要点;5)仿真结果分析及常见问题解决方案。该方法可有效替代机械传感器,降低成本并提高可靠性,适用于空调压缩机、电动汽车水泵等工业场景。文章还提供了详细的调试建议和动手实践指导。

MHD0815的博客 83

TreeSet构造分析及简单实现

[size=12]我们知道java集合大致上可分为:set,list,map三种体系,其中set代表无序不可重复的集合,list代表有序可重复的集合,map代表具有映射关系的集合。后来又增加一种Queue体系集合,代表一种队列的集合实现。每个体系根据内部实现原理的不同,实现了不同的类结构。 例如:常见的在list中就有ArrayList Map中有HashMap set中有HashSet,Tre...

tanglanlanrui的博客 684

YOLOv11 TensorRT极致加速:C++部署性能优化完全指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 116

Qt实现窗口等比例缩放

在Qt中,实现窗口的等比例缩放是一个常见的需求。通过对窗口的尺寸进行调整,使得窗口的内容在缩放过程中保持相同的比例,可以提供更好的用户体验。通过以上的代码,我们实现了一个可以等比例缩放的Qt窗口。在调整窗口大小时,窗口中的标签和按钮将按比例缩放,保持内容的比例不变。首先,我们需要在Qt中创建一个窗口,并设置其内容。在该事件中,我们将根据窗口的新尺寸计算出合适的比例因子,并将其应用到窗口的内容上。现在,我们将添加功能,使得窗口可以等比例缩放。最后,我们将缩放因子应用到窗口中的标签和按钮上,调整它们的尺寸。

2301_79330511的博客 3958

TreeSet及TreeMap源码分析

TreeSet及TreeMap源码

m0_59176231的博客 291

图神经网络实战(21)——图神经网络的可解释性

在本节中,我们探讨了应用于图神经网络 (Graph Neural Networks, GNN) 的可解释性人工智能 (Explainable Artificial Intelligence, XAI) 技术。可解释性是许多领域的关键要素,可以帮助我们建立更好的模型。我们介绍了不同的局部解释技术,并重点讨论了 GNNExplainer (基于扰动的方法),在图分类任务中应用 GNNExplainer。

盼小辉丶的博客 9514

TreeSet源码分析

阅读本文章之前推荐先阅读博主的关于HashSet和TreeMap的源码分析,传送地址: HashSet源码分析,基于JDK1.8详细分析 TreeMap源码分析,基于JDK1.8详细分析 TreeSet源码分析 文章目录TreeSet源码分析一、基本介绍二、源码分析1. 成员变量2. 构造方法3. 增删方法4. 其余方法三、TreeSet和LinkedHashSet的不同 一、基本介绍 TreeSet的作用是保存无重复的数据,底层是采用TreeMap(红黑树)实现的一种Set,所以它是有序的,迭代的时候

立志成为一个前端、后端、测试全方位发展的程序员 483

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

HashSet和TreeSet源码分析

   Set是一个常见接口,用来保存不同的元素。常用的实现了Set接口的类有HashSet,TreeSet。一个底层基于HashMap实现,另一个基于TreeMap实现,理解了上述两个Map之后分析Set源码就比较简单了。HashSet源码分析    hashset 基于HashMap实现,把传入的值作为HashMap的key,由于底层HashMap的key是不可能重复的,因此HashSet也是不...

pb_yan的博客 475

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java treeset原理_Java提高十七:TreeSet 深入分析

前一篇我们分析了TreeMap,接下来我们分析TreeSet,比较有意思的地方是,似乎有Map和Set的地方,Set几乎都成了Map的一个马甲。此话怎讲呢?在前面一篇讨论HashMap和HashSet的详细实现讨论里,我们发现HashSet的详细实现都是通过封装了一个HashMap的成员变量来实现的。这里,TreeSet也不例外。我们先看部分代码,里面声明了成员变量:private transie...

weixin_33594621的博客 538

java TreeSet 源码分析

底层数据结构: TreeMap 哈哈,是不是很惊喜。 没错,treeSet在map(NavigableMap)的基础上,将存储内容作为键存储在map当中,实现了有序的set。 相关面试题 TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素? 源码: public V put(K key, V value) { ...

qq_38572383的博客 287

分析 HashSet 和 TreeSet 分别如何实现去重的

分析 HashSet 和 TreeSet 分别如何实现去重,对比Java实现比较的三种方式

seeing97的博客 1041

深入源码分析TreeSet和TreeMap

分析TreeMap源码

不能说的秘密的博客 5747

《Java源码分析》:TreeSet源码分析

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。

smart_an的专栏 723

java8中treeset源码分析

TreeSet原理与源码分析摘要:TreeSet基于TreeMap实现,底层采用红黑树结构存储数据,保证元素唯一且有序。源码分析显示,TreeSet通过NavigableMap接口(实际为TreeMap)存储数据,构造时可传入Comparator自定义排序。核心方法add()和remove()实质调用TreeMap的对应方法,其中add()通过判断返回值是否为null实现去重。类结构上实现了NavigableSet、Cloneable和Serializable接口,支持排序、拷贝和序列化功能。关键字段包括一

208

java进阶|TreeSet源码分析

18年冬,利用了周末时间和自己交流了很多,由于交流都是基于代码的形式,没有文字可言,最多是在代码的方法上标注了这个方法是用作什么的,别无其他文字说明,19年秋自己开始了自己公众号的第一篇...

qq_35006660的博客 275
上一篇: equals和hashCode方法分析
下一篇: java动态代理分析
lk231_java
博客等级 码龄15年 0粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值