`
hbkh2000
  • 浏览: 205233 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Camparable与Comparator_02

阅读更多

从名字上可以看出来,  
  Comparator是比较器,也就是用来比较别人的,需要两个东西来比较,所以是  
  public   int   compare(Object,   Object);      
  Comparable是自比较的,也就是拿自己和别人比,所以是public int compareTo(Object);
------------------
LinkedList和ArrayList的add方法都不会去比较数据的重复性的,所以实现Comparable与否都没有区别;
如果你需要插入后排序,使用TreeSet,你的类实现Comparable或者新建一个Comparator类,
如果只需要判断重复则只需要HashSet,覆盖equals和hashCode方法;
怎么排序是你Comparator的事情,你只要正确的实现
compare(Object   o1,   Object   o2)方法就可以,至于你认为哪个在前哪个在后,需要按什么排序都是你自己的事情,TreeSet根本不需要知道。
--------------------
Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作),   
而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。  
可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。
-----------------------
Comparator体现了设计模式的“策略模式”。  
  比如Collections.sort(Object   o,   Comparator   c)是用来排序的,但究竟根据什么排序,确切的是怎样定义数组(也可以是集合类对象)中元素的大小关系,比如a1为什么比a2大,这就需要你给它一个策略,而Comparator c就是你传给sort的排序策略。  
见实例:
------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics