zoukankan      html  css  js  c++  java
  • compareTo返回值为-1 、 1 、 0 的排序问题

    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.实例

    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;
    //        }else if(this.weight<o.weight){
    //            return -1;
    //        }
    //        return 0;
    //    }

    Ps:(快速记忆法)当前对象与后一个对象进行比较,如果比较结果为1进行交换,其他不进行交换。

    当后一个对象比当前对象大,返回结果值为1时,前后交换,说明是倒序排列。

    当后一个对象比当前对象小,返回结果值为1时,前后交换,说明是升序排列。

  • 相关阅读:
    CNN comprehension
    Gradient Descent
    Various Optimization Algorithms For Training Neural Network
    gerrit workflow
    jenkins job配置脚本化
    Jenkins pipeline jobs隐式传参
    make words counter for image with the help of paddlehub model
    make words counter for image with the help of paddlehub model
    git push and gerrit code review
    image similarity
  • 原文地址:https://www.cnblogs.com/gengaixue/p/6928654.html
Copyright © 2011-2022 走看看