资讯专栏INFORMATION COLUMN

【comparator, comparable】小总结

KnewOne / 3037人阅读

摘要:有些类是直接实现了接口的,这个时候如果要改写排序条件,就直接改写接口的方法有些类不是用接口,而是用了个类,这时候改写方法接口只有一个方法具体实践中一般写作与某个的比较,比如类比较排序时重写有些类在构造时可以加参数,比如,默认是从小到大排序

有些类是直接实现了Comparable接口的,这个时候如果要改写排序条件,就直接改写Comparable接口的CompareTo方法

有些类不是用Comparable接口,而是用了个Comparator类,这时候改写Compare方法

Comparable接口:
只有一个方法compareTo(T o). 具体实践中一般写作o与某个的比较,比如o.age - this.age.
Comparator类:
1) int compare(T o1, T o2) o1,o2比较(>, < , =)
2) boolean equals(Object obj)
*排序时重写comparator
有些类在构造时可以加Comparator参数,比如PriorityQueue,默认是从小到大排序,如果要改写可以加入一个重写了compare方法的comparator
Comparator revCmp = new Comparator() {

        @Override
        public int compare(Integer left, Integer right) {
            return right.compareTo(left);//原本应该是left.compareTo(right)
        }
    };
    Queue Maxqueue= new PriorityQueue(k, revCmp);

注意这里compareto方法也是Integer类自带的
记录一些的改写Comparator的情况

1) Arrays.sort() 对二维数组

新构建一个comparator重写compare函数,将比较的内容变成两个二维数组
arr2D:二维数组

Arrays.sort(arr2D, new Comparator(){

        public int compare(int[] arr1, int[] arr2){
            if(arr1[0] == arr2[0])
                return arr2[1] - arr1[1];
            else
                return arr1[0] - arr2[0];
        } 
    });
    

2) 对一个类的list进行排序
arrays很容易想到Arrays.sort()的comparator改写,对于list则注意是Collections.sort()改写.Collections还包括list, queue, set...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67307.html

相关文章

  • Comparable and Comparator

    摘要:中的一切类都是继承于,在中实现了函数所以,其它所有的类也相当于都实现了该函数。是比较和的大小。返回负数,意味着比小返回零,意味着等于返回正数,意味着大于。 Comparable Comparable 是排序接口。 Collection.sort() 和Arrays.sort()都支持可以排序实现Comparable接口的类的对象的List列表(或数组) 换而言之, 如果数组或列表想支持...

    Barrior 评论0 收藏0
  • Lambda 表达式

    摘要:例如上一章的苹果谓词接口只有一个抽象方法的接口能让把整个表达式作为函数式接口的实例。这个函数式接口是用来接收一个对象并对其进行处理。 Lambda 管中窥豹 可以把 Lambda 表达式理解为简洁地可传递的匿名函数的一种方式:没有名称,有参数列表、函数主体、返回类型和可能的异常。理论上讲,匿名函数做不到的事,Lambda 也做不了。后者只是让前者可读性更强,写得更轻松。 回顾上一章最后...

    Null 评论0 收藏0
  • 「读懂源码系列2」我从 lodash 源码中学到的几个知识点

    摘要:今天要讲的,是我从的源码实现文件中学到的几个很基础,却又容易被忽略的知识点。在函数式编程中,函数是一等公民,它可以只是根据参数,做简单的组合操作,再作为别的函数的返回值。所以,阅读源码,是一种很棒的重温基础知识的方式。 showImg(https://segmentfault.com/img/bVbpTSY?w=750&h=422); 前言 上一篇文章 「前端面试题系列8」数组去重(1...

    Amio 评论0 收藏0
  • TreeSet和TreeMap的一点总结

    摘要:若是通过进行排序的话当前集合采用的。最后附上一个标准的使用的方法自然排序是实现接口并且重写了方法的另一个则是通过并且重写方法 首先简单介绍下TreeSet和TreeMap的两种排序: 自然排序 通过comparator排序 private static void compareWithCpmparator(){ TreeSet treeSet =new TreeSe...

    ethernet 评论0 收藏0
  • javascript:闭包的总结

    摘要:当函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域,但是闭包情况有所不同。闭包与变量副作用闭包只能取得外层函数中任何变量的最后一个值。可以访问变量,因为这个匿名函数时一个闭包,它能够访问包含作用域中的所有变量。 *前言:这次总结闭包,分别参考了《js高级程序设计》、廖雪峰老师的网站、还有《js忍着秘籍》,好了,废话少说,黑喂狗~~~ -------------------...

    BigNerdCoding 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<