MR-LI_20200901-李伟江

问题

一直都没理解自然排序和比较器排序,今晚才想到关于自己的理解。

自然排序——原理

public int compareTo( Object o ) { 
        if( this.字段 < o.字段 ) {
            return -10 ; 
        } else if( this.字段 == o.字段 ) {
            return 0 ; 
        } else {
            return 10 ; 
        }
    }

应用:

如果一个类实现了Compare接口,那就可以用CompareTo方法去比较。一直都没分清原理和应用的关系。

对象.compareTo(另一个对象) > 0 ;   //对象就大于另一个对象
对象.compareTo(另一个对象) == 0 ;      //对象和另一个对象相等
对象.compareTo(另一个对象) < 0 ;       //对象小于另一个对象

因为底层实现返回值要么正整数——大于0;要么负整数——小于0;要么==0,两个对象相等。

也就想通了只有实现了Compare接口的类,才能在内部这么比较。没想到的一点是,三个对象为什么会比较四次。五个比较七次。

比较器排序——原理

public int compare(Object first, Object second) { 
        if( first.getAge() < second.getAge() ) {
            return -999 ;
        } else if( first.getAge() == second.getAge() ) {
            return 0 ;
        } else {
            return 999 ;
        }
    }

应用:

既然一个类没有实现Compare接口,也就没有CompareTo方法。类似于借助于第三方工具。创造一个比较器(老师当时说的应该是天平)。把两个对象放上去比较,然后得到一个结果。根据得到的结果是否大于0、小于0、或者等于0来判断这两个对象哪个大哪个小。

Comparator<对象类型> c = new 对象Comparator() ;   //创建天平
Arrays.sort( 要排序的对象数组名称 , c );      //c是天平名称,通过两两比较进行排序

吐槽

虽然悟到了一点点,但是感觉还是没有悟到精髓。希望哪一天真的能够顿悟。

标签

© 2021 成都云创动力科技有限公司 蜀ICP备20006351号-1