java集合之TreeSet的整理

【异常】XXL-job触发调度:address:http://192.168.x.x:x/ code:500 msg:xxl-rpc remoting error(connect timed out) XXL-JOB调度任务失败分析:调度中心(10.254.234.80)与执行器(192.168.x.x)连接超时,返回500错误。主要原因是网络不通或执行器异常:1.网络不通可能由防火墙或网段隔离导致;2.执行器未启动或端口未监听;3.地址配置错误。解决方案:1.关闭代理使用内网;2.测试网络连通性和端口可用性;3.检查执行器进程状态和端口监听情况;4.核对执行器地址配置;5.必要时配置防火墙规则放行端口。 阅读详情

TreeSet与HashSet的区别

TreeSet和HashSet相同的地方,就是集合里面不允许有重复的元素。 存储方面,HashSet存储时是乱序存储的,而TreeSet是按照自己定义的顺序,底层通过二叉树来实现存储的,所以,TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。我们可以在构造TreeSet对象时,传递实现Comparator接口的比较器对象。

TreeSet的主要性质

1、TreeSet中不能有重复的元素;

2、TreeSet具有排序功能;

3、TreeSet中的元素必须实现Comparable接口并重写compareTo()方法,TreeSet判断元素是否重复 、以及确定元素的顺序 靠的都是这个方法;(这条性质比较重要,如果读者对TreeSet内部机制比较熟悉的话这条性质应该不难理解;如果读者不太理解的话可以参看以下这篇文章http://wlh269.iteye.com/blog/376430 )

4、对于java类库中定义的类,TreeSet可以直接对其进行存储,如String,Integer等(因为这些类已经实现了Comparable接口);

5.而对于自定义类,就必须在自定义类中实现Comparable接口,或者传递实现Comparator接口的比较对象,不然的话,程序是不知道按照怎么样的顺序来存储自定义类的对象。

Comparable接口的实现和使用

实现方法:
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。


实例:

public class Person implements Comparable<Person> {
    private String name;
    private int age;
    public Person() {
        super();

    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    /*@Override
    public boolean equals(Object obj) {
        System.out.println("执行了吗");
        Person p = (Person)obj;
        return this.name.equals(p.name) && this.age == p.age;
    }
    @Override
    public int hashCode() {
        final int NUM = 38;
        return name.hashCode() * NUM + age;
    }*/
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)                        //调用的对象和传入的对象是同一个对象
            return true;                        //直接返回true
        if (obj == null)                        //传入的对象为null
            return false;                       //返回false
        if (getClass() != obj.getClass())       //判断两个对象对应的字节码文件是否是同一个字节码
            return false;                       //如果不是直接返回false
        Person other = (Person) obj;            //向下转型
        if (age != other.age)                   //调用对象的年龄不等于传入对象的年龄
            return false;                       //返回false
        if (name == null) {                     //调用对象的姓名为null
            if (other.name != null)             //传入对象的姓名不为null
                return false;                   //返回false
        } else if (!name.equals(other.name))    //调用对象的姓名不等于传入对象的姓名
            return false;                       //返回false
        return true;                            //返回true
    }
    public int compareTo(Person o) {
        int length = this.name.length() - o.name.length();              //比较长度为主要条件
        int num = length == 0 ? this.name.compareTo(o.name) : length;   //比较内容为次要条件
        return num == 0 ? this.age - o.age : num;                       //比较年龄为次要条件
    }

}

与Comparator的区别

Comparator位于包java.util下,而Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。

public class Person implements Comparable<Person> {
    private String name;
    private int age;
    public Person() {
        super();

    }
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + age;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)                        //调用的对象和传入的对象是同一个对象
            return true;                        //直接返回true
        if (obj == null)                        //传入的对象为null
            return false;                       //返回false
        if (getClass() != obj.getClass())       //判断两个对象对应的字节码文件是否是同一个字节码
            return false;                       //如果不是直接返回false
        Person other = (Person) obj;            //向下转型
        if (age != other.age)                   //调用对象的年龄不等于传入对象的年龄
            return false;                       //返回false
        if (name == null) {                     //调用对象的姓名为null
            if (other.name != null)             //传入对象的姓名不为null
                return false;                   //返回false
        } else if (!name.equals(other.name))    //调用对象的姓名不等于传入对象的姓名
            return false;                       //返回false
        return true;                            //返回true
    }
    /*@Override
    //按照年龄排序
    public int compareTo(Person o) {
        int num = this.age - o.age;             //年龄是比较的主要条件
        return num == 0 ? this.name.compareTo(o.name) : num;//姓名是比较的次要条件
    }*/
    /*@Override
    //按照姓名排序
    public int compareTo(Person o) {
        int num = this.name.compareTo(o.name);      //姓名是主要条件
        return num == 0 ? this.age - o.age : num;   //年龄是次要条件
    }*/
    public int compareTo(Person o) {
        int length = this.name.length() - o.name.length();              //比较长度为主要条件
        int num = length == 0 ? this.name.compareTo(o.name) : length;   //比较内容为次要条件
        return num == 0 ? this.age - o.age : num;                       //比较年龄为次要条件
    }

}
(一)激光线扫描-三维成像原理 激光线扫描是一种使用激光作为光源,通过特定的扫描设备(如光学镜头、电机驱动的镜头或电子扫描设备)将激光束引导到目标表面,并按照预定的路径进行扫描的技术。这种技术通常用于测量、检测、打印、切割等多种应用中。 阅读详情

相关推荐

ORCAD 层次化原理图使用TCL获取位号的方法

orcad tcl 获取occurrence位号的方法。

m0_46675718的博客 1126

学习-Java集合类之Set的TreeSet之整理电话簿

TreeSet 集合是 Set 集合的实现类,因此它也具有元素唯一性和无序性,它的底层数据结构是 TreeMap 树结构,它确保元素的唯一性是通过 Compareable 接口的 compareto 方法,另外,它既是无序的,又是有序的。无序指的是存储元素顺序和输出顺序不同,有序指的是遍历集合时,输出的所有元素是有序的。如果需要实现自定义排序,例如降序,则可以使用 Comparator 接口,该接口里包含一个 compare(T o1, T o2)方法,该方法用于比较 o1 和 o2 的大小。

千浔的博客 1330

中微8S6990外设开发实战:从GPIO配置到低功耗休眠的完整指南

本文提供了中微8S6990增强型8051单片机从GPIO配置到低功耗休眠的完整实战指南。详细讲解了开发环境搭建、GPIO灵活配置、定时器中断、ADC采样优化、PWM电机控制等核心外设的编程要点与避坑技巧,并重点阐述了实现超低功耗休眠的系统性外设管理策略,帮助开发者快速上手并优化产品续航。

weixin_29162439的博客 533

头歌 :学习-Java集合类之Set的TreeSet之整理电话簿 12-8

头歌 :学习-Java集合类之Set的TreeSet之整理电话簿 12-8

m0_64224735的博客 1992

因果推断(二):因果推断涉及的ITE、ATE、CATE等效应

因果效应也称为**处理效应(Treatment effect)**是用于评判干预与否的结果差异的指标(处理变量对结果变量的影响)。比如在接受治疗组中,如果这些人不接受治疗,这组人接受治疗和不接受治疗的效应差异是多少。定义为实验组中每个个体的处理效应差异,比如一个个体在接收治疗和不接受治疗的两个处理方式的健康程度得分的差。但是一个人因为不可能。比如我们想探究接受治疗的男性用户和不接受治疗的男性用户的平均效果差异就是CATE。前面说ITE是无法观测的,是因为一个人不能同时接受治疗又不接受治疗,这里关键的就是。

Y1n的博客 3713

单片机课程设计——交通灯

单片机课程设计——交通灯一、课程设计主要内容1.1 题目1.2摘要1.3关键词二、设计要求三、设计方案四、参考电路设计4.1.1数码管的设计4.1.2对应程序4.2.1独立按键的设计4.2.2对应程序4.2.3 使用逻辑4.3.1LED模块的设置4.3.2 LED实物图4.3.3 LED显示程序五、调试要点5.1 单片机最小系统5.2 数码管模块5.3 LED模块5.4 独立按键六、总结七、成品图完整程序 一、课程设计主要内容 1.1 题目 交通灯设计 1.2摘要 近年来,随着我国国民经济的快速发展,我国机

PKPROTEUS的博客 3万+

Java集合类之Set的TreeSet之整理电话簿

任务描述 使用 TreeSet 集合整理电话簿。 相关知识 1.什么是 TreeSet 集合 TreeSet 集合是 Set 集合的实现类,因此它也具有元素唯一性和无序性,它的底层数据结构是 TreeMap树结构,它确保元素的唯一性是通过 Compareable 接口的 compareto方法,另外,它既是无序的,又是有序的。 无序指的是存储元素顺序和输出顺序不同, 有序指的是遍历集合时,输出的所有元素是有序的。 2.创建 TreeSet 集合 使用以下代码即可创建 TreeSet 集合。 publ

qq_45823118的博客 3550

ArcGIS实验教程——实验二:ArcGIS地理配准完整操作步骤

本文介绍ArcGIS 10.2中地理配准的完整操作流程,涵盖加载扫描地图、启用地理配准工具条、添加控制点(含经纬度输入与坐标系统选择)、均匀分布控制点以提升精度,并最终通过“更新地理配准”完成栅格数据的空间定位。强调控制点数量、分布及坐标系匹配的重要性,附带实验数据下载链接与获取方式,适用于初学者掌握扫描矢量化前的关键几何校正技能。

智慧空间实验室 9万+

第5关:Java集合类之Set的TreeSet之整理电话簿

本关任务:编写一个使用 TreeSet 集合整理电话簿的小程序。

m0_62222486的博客 514

复现论文《大规模风电场电磁暂态高效建模仿真方法》

本文提出了一种针对大规模风电场电磁暂态(EMT)仿真的高效建模方法。通过三种关键技术实现仿真加速:(1)永磁直驱风电机组一体化等效建模,采用节点导纳矩阵降维将25节点机组简化为4端子电路,仿真速度提升1-3个数量级;(2)基于戴维南/诺顿等效和OpenMP并行计算的风电场整体建模,通过串并联叠加实现节点收缩,30台机组仿真加速近万倍;(3)受控源映射解耦方法提高故障仿真灵活性。复现代码展示了核心算法实现,包括导纳矩阵Schur补降维、多进程并行计算框架以及受控源解耦方法。

huanghm88的专栏 278

Altium Designer20 PCB板子绘制

版层 top layer 顶层 bottom layer 底层 设置板子大小 布局 过孔 top layer层连到bottom layer层。通过via连接。 设置线宽 在design rules里可以设置线宽。 右键new rule 可以新增线宽,电源设置成20mil 还可以设置很多其他的线宽 修改安全距离 安全距离太短容易出现毛刺,然后短路,一般设置成20mil 修改元器件旋转角度 修改rotation step,每次旋转45°。 修改光标大小 下面的cursor type是修改光标

及时总结 2581

8.5 学习-Java集合类之Set的TreeSet之整理电话簿

任务描述 本关任务:使用 TreeSet 集合整理电话簿。 相关知识 什么是 TreeSet 集合 TreeSet 集合是 Set 集合的实现类,因此它也具有元素唯一性和无序性,它的底层数据结构是 TreeMap 树结构,它确保元素的唯一性是通过 Compareable 接口的 compareto 方法,另外,它既是无序的,又是有序的。无序指的是存储元素顺序和输出顺序不同,有序指的是遍历集合时,输出的所有元素是有序的。

m0_65745343的博客 330

YOLOv13改进:卷积魔改 | 动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点

如何跟YOLOv13结合:替代YOLOv13的DS-C3K2

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 364

Java集合整理、ArrayList LinkList HashSet TreeSet等集合的使用

Java集合笔记整理、ArrayList LinkList HashSet TreeSet等集合的使用

m0_48895748的博客 1078

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JAVA基础整理(迭代器,Set集合 TreeSet)

如何遍历list JDK1.7之前底层有一个大小为10的空数组,但是用的无参数,集合中没有元素,所以size为0 JDK1.8 之后提供了优化,不会创建一个10大小的数组,调用add函数,开始开辟堆空间,即数组大小 普通for循环 for(;

root1994的博客 880

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java集合框架整理(七)——TreeSet、HashSet、LinkedHashSet源码分析

title: Java集合框架整理(七)——TreeSet、HashSet、LinkedHashSet源码分析 tag: Java 文章目录title: Java集合框架整理(七)——TreeSet、HashSet、LinkedHashSet源码分析 tag: JavaTreeSet、HashSet、LinkedHashSet源码分析TreeSetHashSetLinkedHashSet总结 T...

hesheng1024的博客 374

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

第1关:学习-Java集合类之Set的TreeSet之整理电话簿

TreeSet 集合是 Set 集合的实现类,因此它也具有元素唯一性和无序性,它的底层数据结构是 TreeMap 树结构,它确保元素的唯一性是通过 Compareable 接口的 compareto 方法,另外,它既是无序的,又是有序的。无序指的是存储元素顺序和输出顺序不同,有序指的是遍历集合时,输出的所有元素是有序的。如果需要实现自定义排序,例如降序,则可以使用 Comparator 接口,该接口里包含一个 compare(T o1, T o2)方法,该方法用于比较 o1 和 o2 的大小。

m0_73614626的博客 679

JAVA 基础知识整理-13(集合类)Set, HashSet,LinkedHashSet,TreeSet

1. Set 类 一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。 方法摘要 boolean add(E o) 如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。 boolean addAll(Collection&...

KathyLJQ的博客 220

Java 知识点整理-11.Java集合框架 Set+HashSet+LinkedHashSet+TreeSet+List和Set迭代方式的区别

目录 Set HashSet LinkedHashSet TreeSet List和Set迭代方式的区别: Set 1、Set集合概述及特点: public interface Set&lt;E&gt; extends Collection&lt;E&gt; 不包含重复元素的集合。 更正式地,集合不包含一对元素e1和e2 ,使得e1.equals(e2) ,并且最多一个空元素。 ...

from_heat的博客 351

List集合、 HashSet、TreeSet 笔记整理

List集合、 HashSet、TreeSet

2301_80024340的博客 350

练习-Java集合类之Set的TreeSet之自定义排序规则

本关任务:自定义 TreeSet 的排序规则(按电话号码降序),整理给定的电话簿。

千浔的博客 922

Java集合干货系列(java集合)

废话不多说,就问你java基础学没学牢固,你是初学者?程序员?这都不妨碍你收藏学习java干活! 没有学过Java基础>>>的同学,基础不牢固的程序猿,都可以在巩固一下! 前言 Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表、Set集合、 Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Colle.

编程领域的博客 165

Java学习 - 集合的第二部分内容

泛型的介绍 泛型是JDK5中引入的特性,它提供了编译时类型安全检测机制泛型的好处把运行时期的问题提前到了编译期间避免了强制类型转换泛型的定义格式<类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:<类型1,类型2…>: 指定多种类型的格式,多种类型之间用逗号隔开.例如: <E,T> <K,V>不可以存储重复元素没有索引,不能使用普通for循环遍历不可以存储重复元素没有索引可以将元素按照规则进行排序。

weixin_67739446的博客 874

常见JAVA集合面试题(自用整理,持续更新)

Java集合框架摘要: Java集合框架分为Collection和Map两大体系。Collection包含List(有序可重复)、Set(无序不可重复)和Queue(队列);Map用于键值对存储。主要实现类包括ArrayList(动态数组)、LinkedList(链表)、HashSet(哈希表)、TreeSet(红黑树)、HashMap(哈希表+链表/红黑树)等。Collection是接口,Collections是工具类。线程安全替代方案推荐使用ConcurrentHashMap代替Hashtable,Co

2401_89221704的博客 1213

集合知识点整理(面试宝典)

小编今日无聊,想起了面试时的一些问题。所以 整理了一下面试中经常遇到的一些关于集合的面试题! 我在面试的时候,面试了几家公司都问到了集合的问题,下面我先用一张思维导图带大家捋一捋集合之间的关系吧!!! 首先,根据图片我们可以看到集合被分为了左右两边;我们先来了解一下右边的结构关系 根据根据右边的图我们很清晰的可以看到connection的父亲是iterable,然后list、set、queque都是他的儿子,接下来我们就根据这个关系去分析面试官他们都会问些什么问题 首先我们可以看到iterable的r

m0_68879220的博客 220

Java集合面试题详解

集合在迭代过程中结构被修改(非迭代器自身的remove方法),抛出ConcurrentModificationException,保证程序快速失败。掌握Java集合框架的原理及各种集合类的区别和适用场景,是Java面试中的重要内容。希望本文对你的面试准备有所帮助。

qq_43754148的博客 405
上一篇: 向HashSet插入自定义对象判断是否重复
下一篇: java GUI 之 适配器模式
Kindle_code
博客等级 码龄12年 21粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值