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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵卓辉 中级黑马   /  2014-3-4 16:56  /  1544 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package com.itheima;

  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.List;

  6. public class CollectionsTestDemo {
  7.         public static void main(String args[]){
  8.                 sortDemo();
  9.         }
  10.         public static void sop(Object obj){
  11.                 System.out.println(obj);
  12.         }
  13.        
  14.         public static void sortDemo(){
  15.                 List<String> list = new ArrayList<String>();
  16.                 list.add("zf5");
  17.                 list.add("cdef");
  18.                 list.add("123");
  19.                 list.add("343cdef");
  20.                 list.add("zf2");
  21.                 list.add("zf1");
  22.                 sop(list);
  23.                 Collections.sort(list,new StrLenComparator());
  24.                 sop(list);
  25.         }
  26. }

  27. class StrLenComparator implements Comparator<String>{
  28.         public int compare(String s1,String s2){
  29.                 if(s1.length()>s2.length())
  30.                         return 1;
  31.                 else if(s1.length()<s2.length())
  32.                         return -1;
  33. <font color="red">                return s1.compareTo(s2);               //问题在此处</font>
  34.         }
  35. }
复制代码

为什么把s1.compareTo(s2)改为s2.compareTo(s1)就能把相同长度的字符串逆序排列?

评分

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

查看全部评分

2 个回复

倒序浏览
compareTo方法是在数字上比较两个 Integer 对象。如果该 Integer 等于 Integer 参数,则返回 0 值;如果该 Integer 在数字上小于 Integer 参数,则返回小于 0 的值;如果 Integer 在数字上大于 Integer 参数,则返回大于 0 的值。
看完这些我想你应该就明白了s1.compareTo(s2)和s2.compareTo(s1)在是s1和s2不相等的情况下返回值一个是正数,一个是负数,所以在调用sort排序后,顺序也会完全相反。

评分

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

查看全部评分

回复 使用道具 举报
因为是这样的,排序是就是根据你写的比较器来进行排序的,如果s1.compareTo(s2) 返回1 那说明在逻辑上s1比s2"大",那么反过来的话,s2.compareTo(s1) 就会返回-1 ,所以造成的排序结果不一样。比如说5>3 那么反过来就是说3 < 5,你可以尝试集合中装一些数字进去,这样你应该更好理解一些,希望我的回答能帮到你

评分

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

查看全部评分

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