两个比较接口Comparable与Comparator

Comparable 和 Comparator 都是用来实现集合中元素的比较、排序的。
一,Comparable

此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。

实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。

所谓与equals一致是指对于类 C 的每一个 e1 和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。

实现方法:重写compareTo方法

String类的compareTo方法实现

 public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }

Integerde的compareTo方法实现

public int compareTo(Integer anotherInteger) {
        return compare(this.value, anotherInteger.value);
    } 
public static int compare(int x, int y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }
这里写代码片

1,Comparable 是在集合内部定义的方法实现的排序
如:public class Xxxxx implements Comparable{}
2,Comparable位于包 java.lang下
3,Comparable接口中必须要实现的compareTo(Object obj)方法
二,Comparator

第一步 首先写一个 排序规则类

public class MyComparator implements Comparator{
    public int compare(Object obj1,Object obj2){
    }
}

第二步Collections.sort(list,排序规则对象);Arrays.sort(数组,排序规则规则);

MyComparator mc=new MyComparator();
Collections.sort(list,mc);

1,Comparator 是在集合外部实现的排序
2,Comparator位于包java.util下
3,Comparator接口中必须要实现的compare(T o1,T o2)就有两个参数。

你可能感兴趣的:(java,comparable,Comparato,比较接口)