Comparable接口实现与使用

1.什么是Comparable接口

此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 的每一个 e1 和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0)e1.equals((Object)e2) 具有相同的布尔值时,类 的自然排序才叫做与 equals 一致 。

2.实现什么方法

int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
 
强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

参数:
       o - 要比较的对象。 
返回:
        负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。 
抛出:
        ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。

3.实例

import java.awt.List;                                                                                
import java.util.Collections;                                                                        
import java.util.LinkedList;                                                                         
                                                                                                     
public class Member implements Comparable<Member> {                                                  
private String studentNum;                                                                       
private String name;                                                                             
private double score;                                                                            
                                                                                                     
public static void main(String[] str){                                                           
LinkedList<Member> memberList;                                                               
memberList = new LinkedList<Member>();                                                       
                                                                                            
memberList.add(new Member("adsf","sadf",88));                                                
memberList.add(new Member("adsf","sadf",66));                                                
                                                                                            
Collections.sort(memberList);                                                                
                                                                                            
for(Member mm:memberList){                                                                   
System.out.println(mm.getStudentNum() + mm.getName() +" " +  mm.getScore());             
}                                                                                            
}                                                                                                
Member() {                                                                                       
}                                                                                                
                                                                                                     
Member(String nn, String n, int g) {                                                             
studentNum = nn;                                                                             
name = n;                                                                                    
score = g;                                                                                   
}                                                                                                
                                                                                                     
public String getName() {                                                                        
return name;                                                                                 
}                                                                                                
                                                                                                     
public void setName(String name) {                                                               
this.name = name;                                                                            
}                                                                                                
                                                                                                     
public String getStudentNum() {                                                                  
return studentNum;                                                                           
}                                                                                                
                                                                                                     
public void setID(String iD) {                                                                   
studentNum = iD;                                                                             
}                                                                                                
                                                                                                     
public double getScore() {                                                                       
return score;                                                                                
}                                                                                                
                                                                                                     
public void setScore(double score) {                                                             
this.score = score;                                                                          
}                                                                                                
                                                                                                     
@Override                                                                                        
public String toString() {                                                                       
return this.studentNum + "  " + this.name + " " + this.score;                                
}                                                                                                
                                                                                                     
@Override                                                                                        
public int compareTo(Member arg0) {                                                              
if ( this.score < arg0.getScore()) {                                                         
return -1;                                                                               
} else if (arg0.getScore() == this.score) {                                                  
return 0;                                                                                
} else {                                                                                     
return 1;                                                                                
}                                                                                            
}                                                                                                
}                                                                                                    

                                                 

4.与Comparator的区别

Comparator位于包java.util下,而Comparable位于包java.lang下。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值