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

集合TreeSet的使用-java

TreeSet的特点:可排序、不重复、无索引。

可排序:按照元素的大小默认升序排序;底层是基于红黑树的数据结构实现排序的,增删改查性能都较好。

对于数值、字符串类型的(Integer 、Double、String)TreeSet可以排序,而对于自定义类型对象就不能直接排序。

示例1:

对于以下类:
class StudentT {int Id;String name;int age;public StudentT(int Id,String name,int age){this.Id=Id;this.name=name;this.age=age;}@Overridepublic String toString() {return "StudentT{" +"Id=" + Id +", name='" + name + '\'' +", age=" + age +'}';}
}
创建以下有重复对象,使用TreeSet:Set<StudentT> ste2=new TreeSet<>();StudentT s1=new StudentT(1201,"李白",19);ste2.add(new StudentT(1201,"李白",19));ste2.add(new StudentT(1230,"李思",18));ste2.add(new StudentT(1206,"张三",19));ste2.add(new StudentT(1201,"李白",19));System.out.println(ste2);

运行结果:

Exception in thread "main" java.lang.ClassCastException: class set_1.StudentT cannot be cast to class java.lang.Comparable (set_1.StudentT is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')

at java.base/java.util.TreeMap.compare(TreeMap.java:1569)

*****************************

at set_1.TreeSet1.main(TreeSet1.java:22)

这就是说:想要使用TreeSet存储自定义类型,需要制定排序规则

  • 自定义排序规则(两种)

  1. 让自定义的类实现Comparable接口重写里面的compareTo方法来定制比较规则。

class StudentT implements Comparable<StudentT>{int Id;
//***********省略同上部分内容*******************@Overridepublic int compareTo(StudentT o) {return this.Id-o.Id;//选择你需要的排序内容,返回值大于0表示是升序}
}
  1. TreeSet集合有参数构造器,可以设置Comparator接口对应的比较器对象,来定制比较规则。(优先级更高

        Set<StudentT> ste2=new TreeSet<>(new Comparator<StudentT>() {@Overridepublic int compare(StudentT o1, StudentT o2) {return o1.getId()-o2.getId();}});
http://www.lryc.cn/news/19255.html

相关文章:

  • Mybatis-plus 分页集成以及基本使用总结 入门和案例 注解连表查询分页案例等
  • 5个设计师常用素材库
  • PHP/7.2.11 缺少 apache2/logs/httpd.pid 文件
  • 【centos7下部署mongodb】
  • pycharm首次使用爬虫框架scrapy遇到的问题和解决方法(二)
  • pyflink学习笔记(二):table_apisql
  • 嵌入式 STM32 实现STemwin移植+修改其配置文件,驱动LCD显示文本 (含源码,建议收藏)
  • [计算机网络(第八版)]第一章 概述(学习笔记)
  • AI绘图:常用镜头和视角
  • TCP四次挥手
  • Tomcat源码分析-类加载器
  • MySQL进阶篇之视图/存储过程/触发器
  • 【一看就会】实现仿京东移动端页面滚动条布局
  • 网易的“草长莺飞二月天”:增长稳健,加码研发,逐浪AI
  • NPC内网穿透教程-入门
  • 【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库
  • Spring源码分析:创建 BeanDefinition 流程
  • Linux 练习一(思维导图 + 练习过程)
  • 高德地图基础教程超详细版
  • 基于A7核开发板的串口实现控制LED亮灭
  • HyperGBM用Adversarial Validation解决数据漂移问题
  • 关基系统三月重保安全监测怎么做?ScanV提供纯干货!
  • RK3588关键电路 PCB Layout设计指南
  • 二分边界详细总结
  • STM32---备份寄存器BKP和 FLASH学习使用
  • Python-生成元组和字典
  • I.MX6ULL内核开发10:设备树
  • 【大数据】记一次hadoop集群missing block问题排查和数据恢复
  • 国产音质好的蓝牙耳机有哪些?国产音质最好的耳机排行
  • CTFer成长之路之XSS的魔力