TreeSet-自然排序与比较器排序

特性

  • TreeSet是有序的(即按照一定的规则排序),是用二叉树实现的。
  • TreeSet 的存取顺序无序

自然排序

可以通过comparable接口重写compareTo方法,改写排序规则,来达到按照一定的规则进行排序。


public class Student implements Comparable//该接口强制对实现它的每个类的对象进行强制整体排序
{private String name;private int age;Student (String name,int age){this.name=name;this.age =age;}public String getName() {return name;}public int getAge() {return age;}public int compareTo(Object obj) {/*  当this.age > age 时进行升序,反之降序,相等则年龄重复,返回。*/if(!(obj instanceof Student))throw new RuntimeException("不是学生对象");Student s=(Student)obj;System.out.println(this.name+"...........compareto..........."+s.name);if(this.age>s.age)return 1;if(this.age==s.age){if(this.age==s.age)return this.name.compareTo(s.name);//String已经实现了这个CompareTo接口,直接调用方法即可elsereturn -1;}return -1;}
}public class treesetDemo {public static void main(String[] args) {TreeSet ts=new TreeSet();ts.add(new Student("lisi01",19));ts.add(new Student("lisi02",22));ts.add(new Student("lisi007",20));ts.add(new Student("lisi009",19));ts.add(new Student("lisi01",19));Iterator it=ts.iterator();while (it.hasNext()) {Student s=(Student)it.next();System.out.println(s.getName()+"     "+s.getAge());}}
}

比较器排序

构建比较器,通过构造匿名内部类来实现Comparator接口,进行排序。

public static void main(String[] args) {TreeSet<Student> tree = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {int a = o1.getAge() - o2.getAge();if (a==0){return o1.getName().compareTo(o2.getName());//String类型的compareTo()方法}return a;}});Student st1 = new Student("小明",10);Student st2 = new Student("小刚",12);Student st3 = new Student("小花",13);Student st4 = new Student("小红",14);Student st5 = new Student("小强",14);Student st6 = new Student("小李",16);tree.add(st1);tree.add(st2);tree.add(st3);tree.add(st4);tree.add(st5);tree.add(st6);for (Student st :tree){System.out.println(st);}}

遍历方法

可以根据根节点的位置,来判断二叉树的排序方式。

  • 前序遍历:根 左 右
  • 中序遍历:左 根 右
  • 后序遍历:左 右 根

TreeSet-自然排序与比较器排序相关推荐

  1. TreeSet集合(自然排序和比较器排序)

    TreeSet集合 自然排序和比较器排序 ​ 当指执行插入排序.希尔排序.归并排序等算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样的比较方式,但当 ...

  2. java中自然排序和比较器排序

    这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...

  3. java中的排序方法,Java中的排序比较方式:自然排序和比较器排序

    这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...

  4. Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))

    Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...

  5. 关于自然排序Comparable 和 比较器排序Comparator

    简要区别 自然排序可用在list和set中,当用在list集合中时要通过Collections(list)对排序规则进行调用,谁是最后一个排序的就按照哪个排序规则进行排序 当用在TreeSet集合中时 ...

  6. TreeSet的自然排序和定制排序

    只要放在TreeSet中的元素对象,在该对象的类中必须实现Comparable接口,必须覆盖该接口中的compareTo()方法,并在该方法中编写比较规则.(该方法不能自动生成) 自然排序(Compa ...

  7. Day48(List接口,ArrayList,LinkedList,Vector,Set接口,HashSet,LinkedHashSet,TreeSet,自然排序,定制排序)

    Collection子接口之一:List接口 List接口概述 鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组 List集合类中元素有序.且可重复,集合中的每个元素都有其对应的顺 ...

  8. TreeSet利用比较器排序

    需求: 创建一个员工类Employee,有姓名name.年龄age.工资salary属性     在TreeSet集合中,添加3个Employee对象     要求:按照员工的工资排序:如果工资相同, ...

  9. Java基础篇自然排序和定制排序

    排序目录 1. 自然排序 1.1 排序说明 1.2 基于Comparable 的实现样例 1.3 实现方式展示 2. 定制排序 2.1 排序说明 2.2 实现方式展示 说明 此篇文章是在学习到集合Tr ...

最新文章

  1. 【组队学习】【26期】图神经网络
  2. 28 模态框拖动案例
  3. mysql处理字符串的两个绝招:substring_index,concat
  4. 计算机图形学与相关学科的关系,哈尔滨工业2015博士招生计算机图形学与人机交互设计大纲...
  5. python自动生成宣传单_python – Matplotlib boxplot只显示最大和最小传单
  6. [Golang] GoConvey测试框架使用指南
  7. 什么是MSTP(多业务传输平台)?
  8. Mac系统SequelPro下载介绍和使用方法
  9. 系统上云服务器地址,可以自己安装系统的云服务器地址
  10. java(jeecg框架) 调用CXF WebService接口的两种方式
  11. div圆角,阴影效果。
  12. MySQL之环境变量配置
  13. shark恒破解笔记2-绕过自校验
  14. java实现百度识图后台
  15. 我的2020年终回顾:人生,海海,破浪前行
  16. MFC控件响应鼠标中键OnMouseWheel
  17. 置信区间,置信水平/置信度
  18. 服务器被攻击网站打不开解决方案
  19. 1000道最新高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构!
  20. 关于Junit测试出现Class not found: “ “这个问题如何解决

热门文章

  1. 《CLR Via C# 第3版》笔记之(二十一) - 异步编程模型(APM)
  2. 一步一个脚印学习WCF系列之WCF概要—WCF与SOA(二)
  3. 华为机试HJ2:计算某字母出现次数
  4. linux快速统计目录大小,linux下统计文件夹、文件的大小--du
  5. 占用率_有问有答:任务管理器里面的GPU占用率到底是怎么算的?
  6. 这7个问题,软件测试面试必问!!!
  7. java 箭头函数_箭头函数丶Java教程网-IT开发者们的技术天堂
  8. 不懂性能测试,被面试官挂了...
  9. python怎么输入下一行_python在指定行前插入一行
  10. matlab平行因子_基于MATLAB某客车悬置系统优化与运动仿真