java comparable实例_JAVA中Comparable接口和自定义比较器示例讲解

自然排序

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

public class 自然排序 {

public static void main(String[] args) {

//定义一个TreeSet集合

TreeSet treeSet = new TreeSet();

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

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

Teacher t3 = new Teacher("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}, Teacher{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]

总结

到此这篇关于JAVA中Comparable接口和自定义比较器的文章就介绍到这了,更多相关JAVA中Comparable接口和自定义比较器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值