黑马程序员技术交流社区

标题: TreeSet练习中的一个小问题 [打印本页]

作者: 张飞年    时间: 2012-9-3 11:09
标题: TreeSet练习中的一个小问题
本帖最后由 张飞年 于 2012-9-3 21:58 编辑

看了两次视频,也查看了Api,对于 compare(Object o1,Object o2)和  对象a.compareTo(对象b)这两个方法还是纠缠不清楚,它们作用有什么区别?在实际运用中有什么技巧,或者说它们的实质是怎样的,哪 个大虾知道啊,说说。
作者: 孙岳    时间: 2012-9-3 11:22
简单来说,compare(Object o1,Object o2)是A调用compare来比较B和C是否相同,而a.compareTo(对象b)是A调用compareto来比较A和B是否相同。
作者: 袁艳超    时间: 2012-9-3 11:39
compareTo(Object obj)是Comparable接口中的方法,compare(Object o1,Object o2)是Comparator接口中的方法其实就是这两个接口有什么区别,
简单的说就是,Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部定义的方法实现的排序;
比如,你定义的Student类实现了Comparable接口,覆盖compareTo方法,那么Student这个类的对象之间是可以比较的,
这个类组成的集合就可以直接使用sort方法排序
  而Comparator可以理解成一种算法的实现,将算法和数据分离
比如,你定义一个MyCom的类implements  Comparator
   那么你创建的MyCom的对象---new MyCom()就是一个比较器对象,
可以直接传个一个集合---List list = new ArrayList(new MyCom());
这样的话,假如你定义Student时忘了实现Comparable接口,
那么把多个Student对象放到list里,也可以排序,而不必改变Student对象本身,也更加灵活
作者: 李志群    时间: 2012-9-3 12:43
TreeSet排序的方式一:让元素自身具备比较性,需要实现Comparable接口,覆盖compareto方法。
                                                        这种比较方式称为自然顺序排序。
                                排序方式二:如果元素自身不具备比较性或者具备的比较性(自然顺序)不是所需要的,
                                这是只能用第二种方式。让容器自身具备比较性,容器一初始化就具备比较功能,意味着,容器在对象构造时
                                完成的,有一个构造方法TreeSet(comparator)在容器初始化时可以指定一个比较器。
                                需要实现comparator 方法
                                所以这种方式为比较器排序。
作者: 刘岩喜    时间: 2012-9-3 21:20
Comparable 用作默认的比较方式
Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
作者: 张飞年    时间: 2012-9-3 21:41
刘岩喜 发表于 2012-9-3 21:20
Comparable 用作默认的比较方式
Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供 ...

你的回答比较正式,我想找个通俗易懂的理解下,我是刚学习这个,呵呵 ,谢谢你啊
作者: 张飞年    时间: 2012-9-3 21:42
李志群 发表于 2012-9-3 12:43
TreeSet排序的方式一:让元素自身具备比较性,需要实现Comparable接口,覆盖compareto方法。
                                                        这种比 ...

回答不错,3Q。
作者: 张飞年    时间: 2012-9-3 21:42
李志群 发表于 2012-9-3 12:43
TreeSet排序的方式一:让元素自身具备比较性,需要实现Comparable接口,覆盖compareto方法。
                                                        这种比 ...

回答不错,3Q。
作者: 杨习平    时间: 2012-9-3 21:42
TreeSet
                        底层数据结构是二叉树,线程不安全。
                        如何保证元素的排序呢?两种方式
                        A:让元素本身具备比较性
                                实现Compareable接口中的compareTo方法。
                        B:让集合具备比较性
                                实现Comparator接口中的compare方法。
作者: 张飞年    时间: 2012-9-3 21:48
袁艳超 发表于 2012-9-3 11:39
compareTo(Object obj)是Comparable接口中的方法,compare(Object o1,Object o2)是Comparator接口中的方法 ...

好专业,谢谢。
作者: 张飞年    时间: 2012-9-3 21:50
孙岳 发表于 2012-9-3 11:22
简单来说,compare(Object o1,Object o2)是A调用compare来比较B和C是否相同,而a.compareTo(对象b)是A调用 ...

很通俗,谢谢
作者: 李志群    时间: 2012-9-4 07:38
张飞年 发表于 2012-9-3 21:42
回答不错,3Q。

哈哈 一起加油哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2