黑马程序员技术交流社区

标题: compareTo方法的问题 [打印本页]

作者: 赵卓辉    时间: 2014-3-4 16:56
标题: compareTo方法的问题
  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)就能把相同长度的字符串逆序排列?

作者: Maple    时间: 2014-3-4 17:08
compareTo方法是在数字上比较两个 Integer 对象。如果该 Integer 等于 Integer 参数,则返回 0 值;如果该 Integer 在数字上小于 Integer 参数,则返回小于 0 的值;如果 Integer 在数字上大于 Integer 参数,则返回大于 0 的值。
看完这些我想你应该就明白了s1.compareTo(s2)和s2.compareTo(s1)在是s1和s2不相等的情况下返回值一个是正数,一个是负数,所以在调用sort排序后,顺序也会完全相反。
作者: 郭黎明    时间: 2014-3-4 19:48
因为是这样的,排序是就是根据你写的比较器来进行排序的,如果s1.compareTo(s2) 返回1 那说明在逻辑上s1比s2"大",那么反过来的话,s2.compareTo(s1) 就会返回-1 ,所以造成的排序结果不一样。比如说5>3 那么反过来就是说3 < 5,你可以尝试集合中装一些数字进去,这样你应该更好理解一些,希望我的回答能帮到你




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