黑马程序员技术交流社区

标题: 问个关于集合比较器的问题,我始终想不明白,大家来看看 [打印本页]

作者: 李红亮    时间: 2013-12-17 20:14
标题: 问个关于集合比较器的问题,我始终想不明白,大家来看看
本帖最后由 李红亮 于 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对象的顺序倒过来就行了?是什么原理?我想不出来,各位大神解析下。

作者: 風諾    时间: 2013-12-17 20:29
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
这句语句,当o1和o2两个对象调换的时候,num的值正负情况与不调换之前相反
因此比较情况就相反了
作者: 李红亮    时间: 2013-12-17 20:33
風諾 发表于 2013-12-17 20:29
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
这句语句,当o1和o2两个对象调 ...

不是很懂,能说的更通俗点吗
作者: 李红亮    时间: 2013-12-17 20:39
風諾 发表于 2013-12-17 20:29
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
这句语句,当o1和o2两个对象调 ...

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

你这样说就有点明白了,回头我看看数据结构,谢了。




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