黑马程序员技术交流社区

标题: TreeSet中倒序输出问题 [打印本页]

作者: joe520kay    时间: 2015-7-21 12:06
标题: TreeSet中倒序输出问题
代码如下:
package com.joe.list;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

/**
* 练习:按照字符串长度排序
*
* @author joe
*
*/

public class TreeSetPractice {
        public static void main(String[] args) {
                TreeSet ts = new TreeSet(new StrLenComparator());

                ts.add("abc");
                ts.add("abec");
                ts.add("at");
                ts.add("abcwrw");

                Iterator it = ts.iterator();

                while (it.hasNext()) {
                        System.out.println(it.next());
                }
        }

}

class StrLenComparator implements Comparator {
        //重写compare方法
        public int compare(Object o1, Object o2) {
                String s1 = (String) o1;
                String s2 = (String) o2;
                //问题:毕老师说要反过来输出 把s1和s2的位置对调即可,我想知道这样的原理是什么?
                //即:int num = new Integer(s2.length()).compareTo(new Integer(s1.length()));

                int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
                if (num == 0)
                        return s1.compareTo(s2);   //这里改为:return s2.compareTo(s1)
                return num;
        }
}


作者: fecuznmn    时间: 2015-7-21 15:52
compareTo方法的返回值是两个对象是否换位的依据

当A>B时,假设compareTo返回值为正值,此时两个对象不换位;
反转A和B的位置,compareTo的返回值变为负值。此时两个对象需换位

这样达到反向排列。
作者: pengbin    时间: 2015-7-21 16:48
楼上答的很好
作者: 小虎199406    时间: 2015-7-21 18:58
意思就是  如果1 < 2 ;  为 true
           就是1<2;

如果1>2; 为true;
   就是  1>2;     了
作者: lishang    时间: 2015-7-21 19:47
排序方式反了,所以再打印出来时,看上去就是反向输出了
作者: joe520kay    时间: 2015-7-22 09:23
fecuznmn 发表于 2015-7-21 15:52
compareTo方法的返回值是两个对象是否换位的依据

当A>B时,假设compareTo返回值为正值,此时两个对象不换 ...

好像懂了




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