您的位置:首页 > 编程语言 > Java开发

Comparable Comparator Java提供比较功能的两种方式

2018-01-03 15:39 211 查看
Java有两种方式来提供比较功能。

1)实现 java.lang.Comparable接口

    实现这个接口使你的类具有“天生”比较的功能。这个接口只有一个 compareTo() 方法,接受一个Object参数,如果当前对象小于参数则返回负值,如果相等则返回零,如果当前对象大于参数则返回正值。

2)使用 java.util.Comparator 接口

    如果有人给你一个并没有实现Comparable的类,或者你的类实现了Comparable,但是你不喜欢它的实现方式,需要另外一种不同的比较方法(总之就是不能使用Comparable),可以创建一个实现了Comparator接口的单独的类。这是策略设计模式的一个应用实例。这个类有compare()和equals()两个方法。除非有特殊的性能需要,一般只重写compare()方法就可以了。

Arrays.sort()用来排序数组,可以直接排序元素实现了Comparable接口的数组。如七种基本类型(包装类)String类型。如果元素没有实现Comparable接口,多个元素进行排序时抛出ClassCastException。

Arrays.sort(T[] a, Comparator<? super T> c) 这个重载方法便是提供给元素没有实现Comparable接口的使用。当然实现了Comparable也可以用这个,在判断上有Comparator就不用Comparable。

注意:对于基本类型排序用快速排序,对于引用类型排序用稳定的归并排序,所以不必担心其性能问题。

Collections.sort(List<T> list) 和 Collections.sort(List<T> list, Comparator<? super T> c) 便是与Arrays.sort()类似的两种方式。

不传入Comparator 参数的TreeSet、TreeMap、ConcurrentSkipListSet、ConcurrentSkipListMap、PriorityQueue、PriorityBlockingQueue构造器,元素必须实现Comparable接口。

DelayQueue它的元素必须实现 Delayed 接口,Delayed接口继承了Comparable<Delayed> 接口,不能用 Comparator。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: