-
*1.果这个对象, 在项目中大多数的情况下, 都采用相同的大小比较的方式。 比如: 一个Person类, 在大多数情况下, 都是按照年龄进行大小比较的。 此时就可以让Person类实现Comparable接口。
-
*2.如果某一个类的对象, 在临时进行大小比较的时候, 使用的与默认的比较不一样的规则。 比如: 一个Person类, 大多数情况下, 都是使用的年龄进行大小比较的, 但是临时需要使用身高进行一次比较, 此时就可以使用 Comparator 临时完成了。 而且, Comparator的优先级要高于Comparable。
-
具体实现,看下边代码。核心是comparable的compareTo方法跟TreeSet的实例化后边的lambda表达式部分。
-
Person类
-
Person实现Comparable接口,实现比较。
-
package day0707.genericParadigm; import java.util.TreeSet; public class TreeSetUsage1 { public static void main(String[] args) { //1.实例化一个TreeSet对象 TreeSet<Person> sets=new TreeSet<>(); sets.add(new Person("xiaoming",10,100,165,50)); sets.add(new Person("xiaohong", 11, 99, 164, 50)); sets.add(new Person("xiaolan", 9, 98, 164, 51)); sets.add(new Person("xiaolv", 8, 98, 166, 48)); sets.add(new Person("xiaozi", 10, 97, 159, 46)); //2.遍历集合 sets.forEach(System.out::println); System.out.println(sets.size()); } } class Person implements Comparable<Person>{ String name; int age; int score; int height; int weight; public Person(String name, int age, int score, int height, int weight) { this.name = name; this.age = age; this.score = score; this.height = height; this.weight = weight; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", score=" + score + ", height=" + height + ", weight=" + weight + '}'; } /** * 制定了大小比较的规则 * @param o 和this进行比较的Person独享 * @return 比较结果 * > 0 : this > o * == 0 : this == o * < 0 : this < o */ @Override public int compareTo(Person o) { //按照年龄从小到大排序 return this.age-o.age; } }
- Person类使用Comparator接口实现临时的比较
- 下边的p.height可以换成age,score,weight,改变比较规则.
-
package day0707.genericParadigm; import java.util.TreeSet; public class TreeSetUsage2 { public static void main(String[] args) { //1.实例化一个TreeSet对象 // 可以通过Comparator进行TreeSet的实例化。使用指定的规则进行大小比较 // 此时,集合中存储的元素可以不是先Comparable接口 TreeSet<Person> sets=new TreeSet<>((p1,p2)->p1.height-p2.height); sets.add(new Person("xiaoming", 10, 100, 165, 50)); sets.add(new Person("xiaohong", 11, 99, 164, 50)); sets.add(new Person("xiaolan", 9, 98, 164, 51)); sets.add(new Person("xiaolv", 8, 98, 166, 48)); sets.add(new Person("xiaozi", 10, 97, 159, 46)); //2.遍历集合 sets.forEach(System.out::println); System.out.println(sets.size()); } }
Comparable与Comparator的使用场景比较
最新推荐文章于 2023-01-24 20:18:00 发布