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的排序策略。  
见实例:
------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值