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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© joe520kay 中级黑马   /  2015-7-21 12:06  /  6076 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
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;
        }
}

5 个回复

倒序浏览
compareTo方法的返回值是两个对象是否换位的依据

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

这样达到反向排列。
回复 使用道具 举报 1 0
楼上答的很好
回复 使用道具 举报
意思就是  如果1 < 2 ;  为 true
           就是1<2;

如果1>2; 为true;
   就是  1>2;     了
回复 使用道具 举报
排序方式反了,所以再打印出来时,看上去就是反向输出了
回复 使用道具 举报
fecuznmn 发表于 2015-7-21 15:52
compareTo方法的返回值是两个对象是否换位的依据

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

好像懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马