加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java的Comparable接口详解

发布时间:2020-12-15 08:24:14 所属栏目:Java 来源:网络整理
导读:一、介绍 ??在java中接口comparable使我们经常要接触到的,比如对集合或者数组进行排序,我们经常使用到Arrays.sort()或者Collections.sort().当集合中的对象是自定义的对象时,我们有两种方法能够使排序方法应用到自定义对象的集合(数组)中。下面我们介绍

一、介绍

??在java中接口comparable使我们经常要接触到的,比如对集合或者数组进行排序,我们经常使用到Arrays.sort()或者Collections.sort().当集合中的对象是自定义的对象时,我们有两种方法能够使排序方法应用到自定义对象的集合(数组)中。下面我们介绍Comparable的用法。

二、java库提供的对象的排序

??下面是List中对Integer对象的排序

public class MainClass {
public static void main(String[] args) {
 List<Integer> list = new ArrayList<Integer>();
 Random rd = new Random();
 for(int i=0;i<10;i++)
   list.add(rd.nextInt(100));
 for(int i:list)
   System.out.print(i+" ");
 Collections.sort(list);
 System.out.println("");
 for(int i:list)
   System.out.print(i+" ");
}
}

这很简单,结果如下:

我们通过Integer的源码可以看出Integer类继承了Comparable接口

并且重写了compareTo,这也是Comparable中唯一的方法。

三、自定义对象的排序

??自定义对象同样需要继承Comparable接口,并重写compareTo方法,这里我们举一个比较学生成绩的Student类,如下:

class Student implements Comparable<Student>{
    int sno;
    int score;
    Student(int sno,int score){
        this.sno = sno;
        this.score = score;
    }
    @Override
    public int compareTo(Student o) {
        if(this.score<o.score) return -1;
        else if(this.score>o.score) return 1;
        else return 0;
    }
}

我们设本对象为A,比较的对象为B,用于比较的属性为x。在compareTo方法中,若A.x<B.x则返回-1,若A.x>B.x则返回1,相等的返回0。这里我们建议如果A.compareTo(B)==0,那么为了保证一致性A.equals(B)中最好也要为真(但这并不强制),可以根据实际情况决定是否重写equals(同样还有hashcode方法),这样在set或者map类型的集合中需药保证compareTo和equals的一致性。

执行的结果如下:

如果上面例子中的Student不继承成Comparable接口,程序会报错,编译通不过。这里我们需要注意一点的是只有继承了Comparable接口并重写了compareTo方法,这个类才视为Compareable类,如果值写了compareTo方法,没有明确implement Comparable则其只是一个普通的类

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读