从名字上可以看出来,
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的排序策略。
见实例:
------------
Camparable与Comparator_02
最新推荐文章于 2024-08-26 11:44:49 发布