Java Comparable vs Comparator
来源:互联网 发布:淘宝怎么看店铺等级 编辑:程序博客网 时间:2024/06/07 04:49
Collections.sort() 和 Arrays.sort()方法可以对Object数组进行排序,但是这种方法排序要求对象所在的类必须实现Comparable接口,此接口用于指定排序规则
import java.util.ArrayList;import java.util.Collections;import java.util.List;public class HDTV implements Comparable<HDTV> { private int size; private String brand; public HDTV(int size, String brand) { this.size = size; this.brand = brand; }public int getSize() { return size;}public void setSize(int size) { this.size = size;}public String getBrand() { return brand;}public void setBrand(String brand) { this.brand = brand;}@Overridepublic int compareTo(HDTV tv) { if (this.getSize() > tv.getSize()) return 1; else if (this.getSize() < tv.getSize()) return -1; else return 0;}public static void main(String[] args) { HDTV tv1 = new HDTV(55, "Samsung"); HDTV tv2 = new HDTV(60, "Sony"); HDTV tv3 = new HDTV(35, "Apple"); List<HDTV> list = new ArrayList<HDTV>(); list.add(tv1);list.add(tv2);list.add(tv3); Collections.sort(list); for (HDTV tv : list) { System.out.println(tv.getSize()+"---"+tv.getBrand()); }}
如果一个类已经开发完成,但是在此类建立的初期并没有实现Comparable接口,此时肯定是无法进行对象排序操作的,所以为了解决这个问题,java定义了另一个比较器的操作接口--Comparator
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;class HDTV { private int size; private String brand; public HDTV(int size, String brand) { this.size = size; this.brand = brand; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; }}class SizeComparator implements Comparator<HDTV> { @Override public int compare(HDTV tv1, HDTV tv2) { int tv1Size = tv1.getSize(); int tv2Size = tv2.getSize(); if (tv1Size > tv2Size) { return 1; } else if (tv1Size < tv2Size) { return -1; } else { return 0; } }}public class Main { public static void main(String[] args) { HDTV tv1 = new HDTV(55, "Samsung"); HDTV tv2 = new HDTV(60, "Sony"); HDTV tv3 = new HDTV(42, "Panasonic"); ArrayList<HDTV> al = new ArrayList<HDTV>(); al.add(tv1); al.add(tv2); al.add(tv3); Collections.sort(al, new SizeComparator()); for (HDTV a : al) { System.out.println(a.getBrand()); }}
}
总结:
Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口)
用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为
参考:Comparable vs Comparator in Java
其他资料:
Comparable与Comparator的区别
Java Sorting: Comparator vs Comparable Tutorial
0 0
- Java Comparable vs Comparator
- Java Comparable vs Comparator
- Java Comparator Vs. Comparable
- Java Sorting: Comparator vs Comparable
- Java Sorting: Comparator vs Comparable
- Comparable vs Comparator in Java
- Comparable vs. Comparator in Java
- Comparator VS Comparable && sort
- Comparator vs Comparable
- Comparable vs. Comparator
- Comparable vs Comparator
- 黑马程序员:Comparable vs Comparator
- 比较器 comparable vs comparator
- java Comparable和Comparator
- Java之Comparable,Comparator
- java数据结构-Comparable&Comparator
- java Comparable Comparator
- java Comparator 与Comparable
- IOS学习笔记-UITableView表索引的颜色设置
- IOS学习笔记——UISearchBar和UISearchDisplayController
- zookeeper原理与使用
- MJPEG+PCM合成AVI视频格式文件
- Oracle Optimizer CBO RBO
- Java Comparable vs Comparator
- Java ExecutorService线程池中的小坑——关于线程池中抛出的异常处理
- JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记1
- R -ggplot2 气泡图
- 扫描给定的包及其子包下面的所有类
- JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记3
- java自带线程池和队列详细讲解
- javascript垃圾收集知识点概要(三)
- 应用程序的生命周期