首页 > 其他 > 详细

类库-集合-Comparable、Comparator

时间:2021-03-11 10:23:03      阅读:25      评论:0      收藏:0      [点我收藏+]

Comparable

Comparable:强行对实现它的每个类的对象进行整体排序。

这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。

只能在类中实现compareTo()一次,不能经常修改类的代码 实现自己想要的排序。

实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

// 自定义类想要实现排序,必须在类中实现 Comparable 接口。
// 重写comparaTo方法,自定义排序规则
public class MyClass implements Comparable<MyClass> {
    @Override
    public int compareTo(MyClass o) {
        if (this.age > o.age) {
            return 1;
        } else if (this.age < o.age) {
            return -1;
        } else {
            return 0;
        }
    }
} 

Set<MyClass> my= new TreeSet<MyClass>();   
// 实现 Comparable 接口add方法方不会报错
// 若没有实现会报错:Exception in thread "main" java.lang.ClassCastException:
**.MyClass cannot be cast to java.lang.Comparable
my.add();        

// 若是String、Integer等jdk内置的已经实现 Comparable 接口的类型,则不会报错
Set<String> my= new TreeSet<String>();   


// 使用sort方法排序亦然
public static void sort(List list);

 

Comparator

Comparator:强行对某个对象进行整体排序。

可以将Comparator 传递给sort方法(如Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。

还可以使用Comparator来控制某些数据结构 (如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

 

// 重写comparator接口的compara方法
// 比较其两个参数的顺序。
public int compare(String s1, String s2);
// 两个对象比较的结果有三种:大于,等于,小于。
// 如果要按照升序排序,
// 则s1 小于s2,返回(负数),相等返回0,s1大于s2返回(正数)
// 如果要按照降序排序
// 则s1 小于s2,返回(正数),相等返回0,s1大于s2返回(负数)

 

// 使用自定义排序规则的sort方法
public static <T> void sort(List<T> list,Comparator<? super T>)

// 使用匿名内部类
// 也可单独定义比较器
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s2.charAt(0) - s1.charAt(0);
    } 
});    

 

类库-集合-Comparable、Comparator

原文:https://www.cnblogs.com/yi-ji/p/14483344.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!