java基础---Compareable和Comparator的区别

1.相同点:

它们两个都是接口,都可以进行排序

2.不同点:

(1)接口里的抽象方法不同

Compareable—>int compareTo( T o );
Comparator-----> int compare(T o1,T o2);

(2)应用方式不同

(1)如果一个类想要通过Compareable方式排序,那要求这个类必须实现Compareable接口,并重写这个类的compareTo方法,那后面不管到哪,该类的对象都可以按照这个排序规则进行排序

jdk自带的类大都实现了这个接口,例如Integer,String等数据类型,所以当我们把数据存进TreeSet集合中,可以实现自动排序,它底层依赖的就是Compareable接口,我们把这种排序方式称为自然排序
源码展示:
Integer

public final class Integer extends Number implements Comparable<Integer>{
//重写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);
    }
}

String

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {

    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;
    }

}

如果是我们自定义的类,例如student类,如果想要通过自己定义的排序规则,那也必须实现这个规则,这样创建对象后,可以调用利用对象1.compareTo(对象2)的方式来对二者进行比较大小

(2)当jdk实现的Compareable排序规则不再满足我们的需要时,这是可以采用new Comparator实现类的方法,让实现类重写里面的compare方法,重新定义排序规则,此时我们称作是比较器排序,那此时就可以利用这个实现类的对象.compare(对象1,对象2)的方式,对两个对象进行排序.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答这个问题。Comparator接口是Java中用于比较两个对象的接口,可以用于排序等操作。如果我们想要对一个对象列表进行排序,可以使用Collections.sort()方法,并且指定一个Comparator对象作为参数来实现排序。下面是一个使用Comparator接口进行排序的示例代码: 假设我们有一个Student类,有两个属性,分别是姓名和年龄。 ```java public class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } } ``` 现在我们有一个Student对象列表,我们想要按照年龄升序排序,可以使用以下代码: ```java List<Student> studentList = new ArrayList<>(); studentList.add(new Student("张三", 18)); studentList.add(new Student("李四", 20)); studentList.add(new Student("王五", 19)); Collections.sort(studentList, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge(); } }); ``` 在上面的代码中,我们创建了一个Comparator对象,实现了compare方法,该方法接收两个Student对象作为参数,并返回一个int值,表示比较的结果。如果返回一个负数,则表示o1比o2小;如果返回一个正数,则表示o1比o2大;如果返回0,则表示o1等于o2。最后,我们调用Collections.sort()方法,并将studentList和Comparator对象作为参数传入,即可对列表进行排序。 希望这个示例可以帮助你理解如何使用Comparator接口进行排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值