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); } });
原文:https://www.cnblogs.com/yi-ji/p/14483344.html