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

本帖最后由 李红亮 于 2013-12-17 23:43 编辑

程序是这样的:
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

class GenericDemo2
{
        public static void main(String[] args)
        {
                TreeSet<String> ts = new TreeSet<String> (new StringLengthComparator());
                ts.add("abcd");
                ts.add("cc");
                ts.add("cba");
                ts.add("aaa");
                ts.add("z");
                ts.add("hahaha");
                for(Iterator<String> it = ts.iterator(); it.hasNext() ;)
                {
                        String s = it.next();
                        System.out.println(s);
                }
        }
}

class StringLengthComparator implements Comparator<String>
{
        public int compare(String o1 , String o2)
        {
                int num = new Integer(o1.length()).compareTo
                (new Integer(o2.length()));
                if(num == 0)
                        return o1.compareTo(o2);
                        return num;
        }
}

我的疑问是:如果想把字符串按照由长到短打印出来,为什么把o1和o2对象的顺序倒过来就行了?是什么原理?我想不出来,各位大神解析下。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

6 个回复

倒序浏览
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
这句语句,当o1和o2两个对象调换的时候,num的值正负情况与不调换之前相反
因此比较情况就相反了
回复 使用道具 举报
風諾 发表于 2013-12-17 20:29
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
这句语句,当o1和o2两个对象调 ...

不是很懂,能说的更通俗点吗
回复 使用道具 举报
風諾 发表于 2013-12-17 20:29
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
这句语句,当o1和o2两个对象调 ...

是不是比较完后,如果返回正数,排序就按升序排?返回负数就按降序排?
回复 使用道具 举报
你不记得视频了吗?什么是二叉树,二叉树的结构是什么,比较结果为负数放左边,为正数放右边,然后先序遍历二叉树(通俗讲就是从左往右遍历)。
反过来就是比较结果为正数放左边,为负数放右边,同样是先序遍历二叉树,相当于第一个二叉树的后序遍历(即从右往左 遍历),就是反过来的意思了。
如果想详细了解,看《数据结构》,里面最基础的内容。
回复 使用道具 举报
衣带赞 发表于 2013-12-17 22:32
你不记得视频了吗?什么是二叉树,二叉树的结构是什么,比较结果为负数放左边,为正数放右边,然后先序遍历 ...

你这样说就有点明白了,回头我看看数据结构,谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马