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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© life55 中级黑马   /  2016-2-6 01:21  /  975 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//需求:将字符串按照长度排序
        public static void main(String[] args) {
                TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {

                        @Override
                        public int compare(String s1, String s2) {        //按照字符串的长度比较
                                int length = s1.length() - s2.length();
                                return length == 0 ? s1.compareTo(s2) : length;
                        }
                });
                ts.add("aaa");
                ts.add("aa");
                ts.add("b");
                ts.add("bbbbb");
                ts.add("bb");
                System.out.println(ts);
        }
上面的 int length = s1.length() - s2.length(); 为什么这样是按顺序排序? s1和s2反过来就变成了倒序了?  麻烦回答的详细点,谢谢!

6 个回复

倒序浏览

明白了吧,你把两个对象的顺序换了当然上面的减法的结果也就变了,除非s1和s2的length相等。
回复 使用道具 举报
宋达思 发表于 2016-2-6 09:34
明白了吧,你把两个对象的顺序换了当然上面的减法的结果也就变了,除非s1和s2的length相等。 ...

我看了这个API,我主要问的不是这个. 我是想问, 为什么顺序排序(从小到大)一定要前面减后面的参数?  
回复 使用道具 举报
补充一点,我主要想问为什么顺序排序(从小到大)一定要前面减后面的参数?  比较器的原理也是一个一个比较,它怎么知道第一个参数就比第二个大呢?
回复 使用道具 举报
我也忘得差不多了,不一定对啊,首先不用纠结谁减谁,这个只不过是写习惯了吧,你反着减也没事,主要还是看结果是0还是正整数或负整数。你用的是TreeSet,那么二叉树原理应该知道吧,不管你用的是Comparable还是Comparator都一样。
回复 使用道具 举报
我也是有点不理解
回复 使用道具 举报
tujiu888 发表于 2016-2-6 18:34
我也是有点不理解

等大神解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马