Java记录 -61- 比较器Comparator

本文介绍如何使用自定义Comparator实现特定对象的排序。通过实现compare方法,可以为TreeSet等数据结构提供排序规则,使自定义对象能按照指定的顺序进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public interface Comparator<T>

强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

自然排序如:整数的1,2,3,4,5;字母的a,b,c,d

针对原始类型或String字符串类型,都默认使用自然排序,可以直接使用集合类进行排序。

但如果我们自定义的对象,其添加到需要排序的集合类中时,集合类不知道其排序规则,需要告诉集合类该新对象的排序规则。

我们需要实现自己的排序类,即实现Comparator。

实现Comparator需要实现其compare方法:

int compare(Object o1, Object o2) 该方法返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。

public class TreeSetTest {    public static void main(String[] args){        TreeSet tree = new TreeSet(new MyComparator());        tree.add(new Person(24));        tree.add(new Person(33));        tree.add(new Person(21));        tree.add(new Person(20));                System.out.println(tree); //[20, 21, 24, 33]    }}class Person{    int age;    String name;    public Person(int age){        this.age = age;    }    public String toString(){        return String.valueOf(this.age);    }}class MyComparator implements Comparator{    public int compare(Object o1, Object o2) {        Person p1 = (Person)o1;        Person p2 = (Person)o2;        return p1.age - p2.age;    }}

TreeSet的存储是有序的,我们自定义的Person对象其排序规则需要我们自定义MyComparator,并告诉TreeSet构造函数,这样TreeSet就可以存储我们自定义的Person对象,并按照我们定义的排序规则将存储的对象进行排序。(按照Person的age属性大小进行排序)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值