今天重新看了一下java的TreeSet,教程里面讲解了,对于自定义的class,当构造TreeSet的时候,需要传递一个Comparator,以防止ClassCastException。但是这样做的话,每个class需要一个实现comparator的比较类,比较繁琐。还有一种方法,自定义的class实现comparable接口。先上代码,最后说不同。
1,实现comparator
class Teacher { private int age; Teacher(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Teacher:" + this.age; } } class TeacherComparator implements Comparator { @Override public int compare(Object o1, Object o2) { Teacher t1 = (Teacher) o1; Teacher t2 = (Teacher) o2; return t1.getAge() - t2.getAge(); } } //main method TreeSet set2 = new TreeSet(new TeacherComparator()); set2.add(new Teacher(10)); set2.add(new Teacher(50)); set2.add(new Teacher(70)); set2.add(new Teacher(20)); set2.add(new Teacher(160)); System.out.println(set2); //out put [Teacher:10, Teacher:20, Teacher:50, Teacher:70, Teacher:160]
上面为新增一个比较器class
2
class Student implements Comparable { private int score; Student(int score) { this.score = score; } @Override public String toString() { return "Student:" + this.score; } @Override public int compareTo(Object o) { Student s = (Student) o; return -(this.getScore() - s.getScore()); } public int getScore() { return score; } public void setScore(int score) { this.score = score; } } //main TreeSet set = new TreeSet(); Student s1 = new Student(10); Student s2 = new Student(30); Student s3 = new Student(20); Student s4 = new Student(70); Student s5 = new Student(50); set.add(s1); set.add(s2); set.add(s3); set.add(s4); set.add(s5); System.out.println(set); //output [Student:70, Student:50, Student:30, Student:20, Student:10]
实现了comparable接口。
3.个人感觉实现comparable比较简单,实现起来不用新增一个class,不会那么繁琐。它们实现的接口不一样comparable实现comparaTo(Object o)接口,compartor实现compar(Object o1,Object o2)。
相关推荐
java排序Comparator和Comparable
java的Comparator和Comparable
Java-中的-Comparator-和-Comparable.md
本文,先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明
NULL 博文链接:https://hellogava.iteye.com/blog/1570101
主要介绍了java 中Comparable与Comparator详解与比较的相关资料,需要的朋友可以参考下
Java中Comparable和Comparator的区别共3页.pdf.zip
Comparable与Comparator的区别Java开发Java经验技巧共3页.pdf.zip
Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
详细的介绍了Java中Comparable与Comparator的区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个...
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧
主要介绍了Java Comparable和Comparator对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
通过简单的例子初步了解Comparable和Comparator的使用,注释很详细
主要介绍了Java 比较接口comparable与comparator区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://gghaomm.iteye.com/blog/1753970
主要针对Java中Comparable和Comparator对象进行比较,感兴趣的小伙伴们可以参考一下
主要介绍了详解Java中Comparable和Comparator接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode