JAVA中Comparable接口和自定义比较器示例讲解

网友投稿 242 2022-11-17


JAVA中Comparable接口和自定义比较器示例讲解

自然排序

TreeSet集合在存储数据时有一定的顺序,它会将一些数据进行比较,比较调用的是comparaTo()方法,该方法是在Comparable中定义的,自然排序要求TreeSet集合中存储的数据必须实现Comparable接口,并且重写ComparaTo()方法

public class 自然排序 {

public static void main(String[] args) {

mcGBmhmDk //定义一个TreeSet集合

TreeSet treeSet = new TreeSet();

Teacher t1 = new Teacher("Jack",19);

Teacher t2 = new Teacher("King",20);

Teacher t3 = new Teacherhttp://("Tom",19);

Teacher t4 = new Teacher("Rose",20);

treeSet.add(t1);

treeSet.add(t2);

treeSet.add(t3);

treeSet.add(t4);

System.out.println(treeSet);

}

}

//定义Teacher类实现Comparable接口

class Teacher implements Comparable{

String name;

int age;

public Teacher(String name,int age){

this.name = name;

this.age = age;

}

//重写toString方法

@Override

public String toString() {

return "Teacher{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

//先比较年龄在比较名字

@Override

public int compareTo(Object o) {

Teacher teacher = (Teacher)o;

if (this.age > teacher.age){

return 1;

}

if (this.age == teacher.age){

return this.name.compareTo(teacher.name);

}

return -1;

}

}

运行结果

[Teacher{name='Jack', age=19}, TeamcGBmhmDkcher{name='Tom', age=19}, Teacher{name='King', age=20}, Teacher{name='Rose', age=20}]

定制排序

如果单单使用ComparaTo()不能满足要求,这时可以通过在创建TreeSet集合的时候就自定义一个比较器来对元素进行定制排序

import java.util.Comparator;

import java.util.TreeSet;

public class 定制排序 {

public static void main(String[] args) {

//在创建集合是传入比较器

TreeSet treeSet = new TreeSet(new MyComparable());

treeSet.add("Jack");

treeSet.add("Tom");

treeSet.add("Helena");

System.out.println(treeSet);

}

}

//自定义的比较器

class MyComparable implements Comparator{

@Override

public int compare(Object o1, Object o2) {

//以单词的长度来排序

String s1 = (String)o1;

String s2 = (String)o2;

int resoult = s1.length() - s2.length();

return resoult;

}

}

结果

[Tom, Jack, Helena]

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:dockerfile
下一篇:Java两种常用的随机数生成方式(小白总结)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~