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。
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。
相关文章推荐
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- java多线程总结一:线程的两种创建方式及优劣比较
- java中Map的两种不同遍历、迭代方式及比较
- Java中两种String对象创建和初始化方式比较
- Java中两种String对象创建和初始化方式比较
- java多线程总结一:线程的两种创建方式及比较
- java语言基础入门——字符串两种建立方式的比较
- Java多线程中线程的两种创建方式及比较代码示例
- Java多线程的实现方式比较(两种方式比较)
- java多线程总结一:线程的两种创建方式及优劣比较
- Java_IO_两种文件复制方式比较
- java中操作xml的两种方式DOM和SAX比较
- arcims 两种连接方式(java connector,servlet connector)的一些比较- -
- java多线程总结一:线程的两种创建方式及优劣比较
- java创建线程的两种方式比较
- Java多线程总结(一):Java两种创建线程方式的比较
- java多线程总结一:线程的两种创建方式及优劣比较
- java定义二维数组的两种方式比较
- Java中HashMap遍历的两种方式比较
- Java实现多线程的两种方式比较及区别