• java的Comparable接口详解


    一、介绍

      在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则其只是一个普通的类

  • 相关阅读:
    JS判断浏览器
    【JS】时间不足10位补0方案
    【js学习小计】
    【Tangram】 通过监听进行事件触发
    JavaScript CSS Style属性对照表
    Resolve and Remove "BAD PASSWORD: It is Based on a Dictionary Word "in Linux
    [C++]关键字explicit
    [转]CentOS设置程序开机自启动的方法
    SqlServerCLR聚合函数:分组连接字符串
    vmware centos 虚拟机复制
  • 原文地址:https://www.cnblogs.com/Mrfanl/p/11344613.html
Copyright © 2020-2023  润新知