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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闲人 中级黑马   /  2014-4-4 13:09  /  1090 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闲人 于 2014-4-4 13:19 编辑
  1. import java.util.*;
  2. public class CollectionsDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 sortDemo();
  7.         }
  8.         public static void sortDemo(){
  9.                 List<String> list = new ArrayList<String>();               
  10.                 list.add("abcd");
  11.                 list.add("aaa");
  12.                 list.add("z");
  13.                 list.add("kkkk");
  14.                 list.add("qq");
  15.                 list.add("ss");
  16.                 list.add("z");
  17.                 sop(list);               
  18.                 Collections.sort(list);//自然排序
  19.                 sop(list);
  20.                 //下面的那条好像不执行的样子
  21.                 Collections.sort(list,new StrLenComparator());//按长度排序
  22.                 sop(list);
  23. }
  24.         public static void sop(Object obj)
  25.         {
  26.                 System.out.println(obj);
  27.         }
  28. }
  29. class StrLenComparator implements Comparator<String>
  30. {
  31.         public int compare(String s1,String s2){
  32.                 if(s1.length()>s2.length())
  33.                         return 1;
  34.                 if(s2.length()<s2.length())
  35.                         return -1;
  36.                 return s1.compareTo(s2);
  37.         }
  38. }
复制代码

执行结果是:
  1. [abcd, aaa, z, kkkk, qq, ss, z]
  2. [aaa, abcd, kkkk, qq, ss, z, z]
  3. [aaa, abcd, kkkk, qq, ss, z, z]
复制代码

问题:代码编译通过,但是就是不按照我编的方法进行排序,找了半天,找不出问题了,帮我看看,求指点

3 个回复

倒序浏览
本帖最后由 anqi 于 2014-4-4 13:22 编辑

有打印结果但是 结果的顺序不对,那肯定是代码执行到了,但执行错误。所以分析比较器的语句
你的比较器里面的方法
if(s2.length()<s2.length())      //两个s2进行了比较,无效语句。
                        return -1;
              

回复 使用道具 举报
anqi 发表于 2014-4-4 13:18
肯定写错了啊 你的比较器里面的方法
if(s2.length()

我晕,脑袋懵了,看了好多遍,愣是没看出来,谢谢了
回复 使用道具 举报
建议你比较器这么写 比较直观

  1. class StrLenComparator implements Comparator<String> {
  2.         @Override
  3.         public int compare(String s1, String s2) {
  4.                 if(s1.length()==s2.length())
  5.                         return s1.compareTo(s2);
  6.                 return new Integer(s1.length()).compareTo(new Integer(s2.length()));
  7.         }
  8. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马