黑马程序员技术交流社区

标题: Comparable是TreeSet集合中特有的特性嘛 其他集合可以用不 [打印本页]

作者: 赵亚威    时间: 2013-3-22 12:32
标题: Comparable是TreeSet集合中特有的特性嘛 其他集合可以用不
本帖最后由 赵亚威 于 2013-3-23 12:18 编辑

Comparable是TreeSet集合中特有的特性嘛 其他集合可以用不
作者: 谢洋    时间: 2013-3-22 13:06
java.lang
接口 Comparable<T>
类型参数:
T - 可以与此对象进行比较的那些对象的类型
java.util
类 TreeSet<E>
java.lang.Object
  java.util.AbstractCollection<E>
      java.util.AbstractSet<E>
          java.util.TreeSet<E>
类型参数:
E - 此 set 维护的元素的类型
所有已实现的接口:
Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet<E>, Set<E>, SortedSet<E>
上面上API查阅的:好像他俩没什么关系
但是存入TreeSet集合中的元素(对象)必须具有可比较性或让TreeSet具有可比较的方式(把比较器作为TreeSet的构造实参)
要使用元素(对象)具有比较性,那就得实现Comparable接口,根据元素实际需求情况复写CompareTo方法,
当TreeSet在存入元素(对象)时,就会调用该方法,并依据该方法的返回值来进行排序的,更详细可以查阅API
作者: 葛伟    时间: 2013-3-22 13:17
、Comparable接口需要重写一个方法,即public int compareTo(Object o){};
2、同Comparator一样,它们实际都是通过改写某种规则来实现对象之间的比较,如此题中自定义的DOG类,通过比较WEIGHT来实现其整个对象数组的排列,而调用的方法都是Arrays.sort(),但要注意二者使用该方法的参数并不相同,较之书本例子Comparable可能更形象一些。
3、对升序降序的改写分析:返回负值的排前,返回正值的排后,为了把this这个当前对象大时排前,小时插后(即实现降序),比较时显然该在this大时返回负值,this小时返回正值
TreeMap:它实现SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。
作者: 赵亚威    时间: 2013-3-22 13:53
汗 你们说的我明白 问题是其他集合可以用不 你这是答不对题呀
作者: 谢洋    时间: 2013-3-22 16:36
本帖最后由 谢洋 于 2013-3-22 16:38 编辑
赵亚威 发表于 2013-3-22 13:53
汗 你们说的我明白 问题是其他集合可以用不 你这是答不对题呀


上面说得那么明白,你又说自已明白,还问:其他集合可以用不?我想直接说能不能并不有助于你理解
作者: 赵亚威    时间: 2013-3-22 17:27
这个我知道 其实你也不敢说能不能用 只能给我说这些 如果你知道 就会说什么时候能用 什么时候不能用 或者不能 或者能
作者: 赵亚威    时间: 2013-3-22 18:10
无论是Comparable还是Comparator都是TreeSet集合特有的 而TreeSet底层是用的TreeMap集合 所以TreeMap也可以使用比较器  例如其他排序都是通过equals进行排序 HashMap还要先比较哈希值 不过其他集合还是可以使用的 通过工具类 可以使用自定义的比较器 equals自身就是自然排序 不过如果复写后就是按照自己定义的规则来排序了
这也可以叫做自定义规则排序




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