比较器排序的实现方式

public class Student2 {private String name;private int age;public Student2() {}public Student2(String name, int age) {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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}import java.util.Comparator;//方式1:自己创建一个类实现Comparator接口public class MyComparetor implements Comparator<Student2> {@Overridepublic int compare(Student2 o1, Student2 o2) {//题目要求:按照姓名的长度进行排序int i = o1.getName().length() - o2.getName().length();//姓名长度一样不代表姓名的内容一样int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;//姓名的长度和内容一样,但是年龄可能不一样//只有当姓名和年龄都一样的时候,才能判断是同一个人int i3 = i2 == 0 ? o1.getAge()-o2.getAge() : i2;return i3;}
}import java.util.Comparator;
import java.util.TreeSet;/*根据创建 set 时提供的 Comparator 进行排序具体取决于使用的构造方法。*/
public class TreeSetDemo2 {public static void main(String[] args) {//方式1:通过匿名对象的方式传参
//        TreeSet<Student2> ts = new TreeSet<Student2>(new MyComparetor());//方式2:通过匿名内部类的方式TreeSet<Student2> ts = new TreeSet<Student2>(new Comparator<Student2>() {@Overridepublic int compare(Student2 o1, Student2 o2) {//题目要求:按照姓名的长度进行排序int i = o1.getName().length() - o2.getName().length();//姓名长度一样不代表姓名的内容一样int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;//姓名的长度和内容一样,但是年龄可能不一样//只有当姓名和年龄都一样的时候,才能判断是同一个人int i3 = i2 == 0 ? o1.getAge()-o2.getAge() : i2;return i3;}});//创建学生对象Student2 s1 = new Student2("zhujiale",18);Student2 s2 = new Student2("caoxintao",17);Student2 s3 = new Student2("taohuagen",19);Student2 s4 = new Student2("zhangmi",16);Student2 s5 = new Student2("caoxintao",19);//将学生对象添加到集合ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);ts.add(s5);for(Student2 s : ts){System.out.println(s);}}
}

TreeSet是如何保证元素的排序和唯一性的

import java.util.TreeSet;/*TreeSet是如何保证元素的排序和唯一性的底层数据结构是红黑树(红黑树是一种自平衡的二叉树)*/
public class TreeSetDemo3 {public static void main(String[] args) {TreeSet<Integer> ts = new TreeSet<>();ts.add(32);ts.add(18);ts.add(15);ts.add(24);ts.add(30);ts.add(32);ts.add(15);for(Integer i : ts){System.out.println(i);}}
}

TreeSet是如何保证元素的排序和唯一性的图解

习题

public class Student implements Comparable<Student>{private String name;private int age;public Student() {}public Student(String name, int age) {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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(Student o) {//题目要求:按照姓名的长度进行排序int i = this.name.length() - o.name.length();//姓名长度一样不代表姓名的内容一样int i2 = i == 0 ? this.name.compareTo(o.name) : i;//姓名的长度和内容一样,但是年龄可能不一样//只有当姓名和年龄都一样的时候,才能判断是同一个人int i3 = i2 == 0 ? this.age-o.age : i2;return i3;}
}import java.util.TreeSet;/*需求:使用TreeSet集合存储学生对象,根据姓名的长度进行排序
*/
public class TreeSetDemo {public static void main(String[] args) {TreeSet<Student> ts = new TreeSet<Student>();//创建学生对象Student s1 = new Student("zhujiale",18);Student s2 = new Student("caoxintao",17);Student s3 = new Student("taohuagen",19);Student s4 = new Student("zhangmi",16);Student s5 = new Student("caoxintao",19);//将学生对象添加到集合ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);ts.add(s5);for(Student s : ts){System.out.println(s);}}
}

集合--TreeSet类比较器排序的实现方式及如何保证元素的排序和唯一性相关推荐

  1. 集合概述二(Set接口+HashSet集合+LinkedHashSet集合+TreeSet集合)

    一(Set接口): 1.Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Coll ...

  2. Java技能树-集合-ArrayList类

    1 需求 2 接口 Class ArrayList<E> public class ArrayList<E> extends AbstractList<E> imp ...

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

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

  4. Java 集合之TreeSet 自定义类 比较器

    Java 集合之TreeSet 基于 TreeMap 的 NavigableSet 实现. 使用元素的自然顺序进行排序,或者通过在集合创建时提供的 Comparator 进行排序,具体取决于使用的构造 ...

  5. 集合--Set集合--HashSet类、LinkedHashSet类、TreeSet类及其自然排序

    Set集合 HashSet类 import java.util.HashSet;/*Set集合:元素唯一且元素无序(存储和取出顺序不一致)的集合HashSet类概述不保证 set 的迭代顺序特别是它不 ...

  6. 扑克牌自定义排序,使用集合TreeSet实现实体对象排序,通过实现Comparable接口,重写compareTo比较器;

    一.继承Comparable实现排序 下面以扑克牌为例: 首先创建扑克实体类继承Comparable<Poker>接口: public class Poker implements Com ...

  7. JAVA集合四:比较器--类自定义排序

    参考链接: HOW2J.CN 前言 对于JAVA集合,都能够用集合的工具类Collections 提供的方法: Collections.sort(List list) Collections.sort ...

  8. Java中的TreeSet集合会自动将元素升序排序

    我们都知道,java中的集合可以分为这么两大类:Collection和Map ,其中Collection 接口中又可以派生出来两个接口,分别为:List和Set接口. 其中,Set下有HashSet, ...

  9. java treeset比较,java中TreeSet的两种排序比较的方式

    第一种是使得元素具有比较性 第二种是让集合具有比较性 具体代码步骤如下: import java.util.*; /* * TreeSet:可以自动对对集合中的元素进行排序 * 第一种比较方式 * 步 ...

  10. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

最新文章

  1. vue状态管理存取数据_vue状态管理vuex从浅入深详细讲解
  2. python读取 application_python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)...
  3. redhat linux修改乱码
  4. Ubuntu 18的中文界面切换《图解教程》亲测成功
  5. 解决window的bat脚本执行出现中文乱码的问题
  6. BugkuCTF-WEB题矛盾
  7. Infographic Modern Graphs Mac(现代信息图表动画fcpx插件)
  8. Chrome 开发工具 Workspace 使用
  9. 苹果任命软件主管凯文•林奇为“苹果汽车”项目负责人
  10. 用js和jq分别实现二级联动效果
  11. 加速下载 玩转土豆网FLV视频四招
  12. moodle安装体验
  13. 系列4—BabeLua常见问题
  14. python 保存视频为图片
  15. 跟Nature学SCI图片高级配色
  16. win10升级补丁_官方win10教育版怎么样
  17. 过滤器(Filter)应用:全站压缩----Gzip网页压缩输出
  18. RFC 文档中文目录
  19. 如何将论文中的公式图片直接变为word中的公式
  20. 2020牛客寒假算法基础集训营3 B 牛牛的DRB迷宫II二进制详解

热门文章

  1. 【OpenGL】OpenGL帧缓存对象(FBO:Frame Buffer Object)
  2. 9款最好用的Bilibili影片下载线上工具推荐
  3. 理论力学---约束及其分类
  4. hdoj1814 Peaceful Commission【2-set】
  5. 正整数分解使得乘积最大问题
  6. iov_iter操作
  7. Opencv实现颜色检测
  8. 比尔·盖茨、UNIX之父等全球14位IT大佬,总结的18句编程名言!
  9. 一文看懂GPIO口的八种工作原理
  10. PHP面向对象编程的基本概念定义操作属性方法