compareTo返回值为-1、1、0的排序问题
1.什么是Comparable接⼝
此接⼝强⾏对实现它的每个类的对象进⾏整体排序。此排序被称为该类的⾃然排序,类的compareTo ⽅法被称为它的⾃然⽐较⽅法。实现此接⼝的对象列表(和数组)可以通
过Collections.sort (和Arrays.sort )进⾏⾃动排序。实现此接⼝的对象可以⽤作有序映射表中的键或有序集合中的元素,⽆需指定⽐较器。强烈推荐(虽然不是必需的)使⾃然排
序与 equals ⼀致。所谓与equals⼀致是指对于类C 的每⼀个e1和e2 来说,当且仅当(e1pareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类C 的⾃然排序才叫
做与 equals ⼀致。
2.实现什么⽅法
int compareTo(T o)
⽐较此对象与指定对象的顺序。如果该对象⼩于、等于或⼤于指定对象,则分别返回负整数、零或正整数。
强烈推荐 (xpareTo(y)==0) == (x.equals(y)) 这种做法,但不是严格要求这样做。⼀般来说,任何实现 Comparable 接⼝和违背此条件的类都应该清楚地指出这⼀事实。推荐如此阐述:“注意:此类具有与 equals 不⼀致的⾃然排序。”参数:
o - 要⽐较的对象。
返回:
负整数、零或正整数,根据此对象是⼩于、等于还是⼤于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进⾏⽐较。
3.实例
package test1;
public class Note<T> implements Comparable<Note<T>> {
private T data; //数据
private int weight; //权值
private Note<T> left; //左孩⼦
private Note<T> right; //右孩⼦
public Note(T data,int weight){
this.data=data;
this.weight=weight;
}
@Override
public String toString(){
return "data="+this.data+",weitht="+this.weight;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public Note<T> getLeft() {
return left;
}
public void setLeft(Note<T> left) {
this.left = left;
}
public Note<T> getRight() {
return right;
}
public void setRight(Note<T> right) {
this.right = right;
}
/**
* 倒序排列。
*/
@Override
public int compareTo(Note<T> o) {
if(o.weight>this.weight){
return 1;
}else if(o.weight<this.weight){
return -1;
}
return 0;
}
/**
* 升序排列
*/
//    @Override
//    public int compareTo(Note<T> o){
//        if(this.weight>o.weight){
//            return 1;equals不等于
//        }else if(this.weight<o.weight){
/
/            return -1;
//        }
//        return 0;
//    }
Ps:(快速记忆法)当前对象与后⼀个对象进⾏⽐较,如果⽐较结果为1进⾏交换,其他不进⾏交换。
当后⼀个对象⽐当前对象⼤,返回结果值为1时,前后交换,说明是倒序排列。
当后⼀个对象⽐当前对象⼩,返回结果值为1时,前后交换,说明是升序排列。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。