黑马程序员技术交流社区

标题: TreeMap和TreeSet自然排序的疑问 [打印本页]

作者: loading……99.9    时间: 2013-10-15 23:21
标题: TreeMap和TreeSet自然排序的疑问
本帖最后由 loading……99.9 于 2013-10-16 10:23 编辑

今天开JDK帮助文档说这个两个类存储元素是按那个自然顺序对应元素(键)进行排序,自然排序是什么意思,举个例子。如果我不想要他的默认的这个自然排序,我想要逆转顺序,能实现吗?如果能该怎么弄?
作者: HM李超    时间: 2013-10-16 00:02
      我的理解,集合元素按照自然排序,是按照元素内容去查编码表,取出编码,比较编码大小,返回结果,例如元素“abc”与“acc”比较,那么前者小于后者。
     如果要按照程序员自定义比较的话,有2中方法:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
作者: murder_fol    时间: 2013-10-16 00:11
自然排序就是对象所属的类自己具有的排序方式,有自然排序的类,都实现了Comparable接口,实现了compareTo方法。是相对于通过传递一个比较器而言的
作者: 杨增坤    时间: 2013-10-16 09:21
    1.自然排序的话,那么对象必须接口Comparable,那么对象就具有了可比性,可以作为TreeSet的元素或者是TreeMap的键或者值,这样就可以排序了。
    2.如果可以按照自己的意愿排序的话,那么就自定义比较器,定义一个类,继承Compartor接口,然后重写compara方法,
如果想逆序的话,那么就可以使用Connections工具类,然后利用reverseOrder()获得反向的比较器或者是reverseOrder(Comparator<T> cmp)方法,
然后把获得的逆向比较器传给集合或者是Collections的sort方法。

希望对你有帮助!





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