A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© danmo 中级黑马   /  2014-8-24 23:53  /  1530 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在java基础视频中,集合框架中两个接口的区别?

4 个回复

倒序浏览
本帖最后由 依然超级赛亚人 于 2014-8-25 06:56 编辑

我感觉简单来说,使用方法和作用方式上有两点不同:
1.Comparable接口需要被进行比较的类去实现,实现之后是按照这个类自己定义的比较方法去比较;
2.Comparator接口也需要参与比较的类去实现,重写一下它的compare方法,然后把它的对象作为TreeSet或TreeMap的构造函数的参数传进去就好了,这个比较就是TreeSet或TreeMap的比较了,主导权在它们这。而且即使已经用Comparable实现比较的前提下也能接着用Comparator比较,并且以它为主。
回复 使用道具 举报
从名字上面来看:
comparable接口, 代表的是一种能力.
      如果一个类实现了这个接口, 这个类就有这种能力.
comparetor接口, 代表的是一种因子, 比较用到的因子.
      所以, 其是直接注册给集合的.
回复 使用道具 举报
实现comparable,是为了让元素自身具备比较性
而实现comparetor是为了自定义自己的一个比较器,这是我的一个比较简单的理解
回复 使用道具 举报
百度的,希望能帮助你,这个说的很详细。
Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
Comparator位于包java.util下,而Comparable位于包   java.lang下
Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口)   
自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,如API所说:
Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface
这里的自然顺序就是实现Comparable接口设定的排序方式。
而 Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
可以说一个是自已完成比较,一个是外部程序实现比较的差别而已。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马