黑马程序员技术交流社区
标题:
compareTo方法的问题
[打印本页]
作者:
赵卓辉
时间:
2014-3-4 16:56
标题:
compareTo方法的问题
package com.itheima;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsTestDemo {
public static void main(String args[]){
sortDemo();
}
public static void sop(Object obj){
System.out.println(obj);
}
public static void sortDemo(){
List<String> list = new ArrayList<String>();
list.add("zf5");
list.add("cdef");
list.add("123");
list.add("343cdef");
list.add("zf2");
list.add("zf1");
sop(list);
Collections.sort(list,new StrLenComparator());
sop(list);
}
}
class StrLenComparator implements Comparator<String>{
public int compare(String s1,String s2){
if(s1.length()>s2.length())
return 1;
else if(s1.length()<s2.length())
return -1;
<font color="red"> return s1.compareTo(s2); //问题在此处</font>
}
}
复制代码
为什么把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