黑马程序员技术交流社区

标题: Collections集合工具类max问题 [打印本页]

作者: Massive    时间: 2013-11-19 18:45
标题: Collections集合工具类max问题
本帖最后由 Massive 于 2013-11-19 18:54 编辑
  1. private static void demo3() {
  2.                 List<String> list = new ArrayList<>();
  3.                 list.add("12");
  4.                 list.add("23");
  5.                 list.add("3");
  6.                 list.add("9");
  7.                 list.add("5");
  8.                 System.out.println(list);     //怎么存怎么取
  9.                 Collections.sort(list,Collections.reverseOrder());//正着存进去 然后反转过来
  10.                 System.out.println(list);
  11.                 //Collections.max(list);
  12.                 String str = Collections.max(list);                //取自然排序的
  13.                 System.out.println(str);
复制代码
  1. [12, 23, 3, 9, 5]
  2. [9, 5, 3, 23, 12]    //这是eclipse的结果,集合反转好像也不对呀
  3. 9
复制代码
我的问题:集合反转后调用max方法得到的结果是9 ,这里就不明白了,求解释一下.是不是一般不这么用啊.
作者: 何丛    时间: 2013-11-19 20:57
楼主,你的list对象中存入的是字符串,String类实现了Comparable<String>接口,覆写了compareTo方法。String类中的compareTo方法是这样的:
1.当一个字符串是另一个字符串从首字母开始截取的子串时,调用compareTo方法返回的是两个字符串的长度之差;
2.两个字符串完全相同时,返回0
3.有一个字符串为空串时,返回另一个字符串的的长度
4.两个字符串不同又不是第一种情况时,就从第一个字母开始依次比较两个字符串中的字母,返回第一个不相同的字母的ASCII码值之差,请注意有可能是负数
如果对上面的list进行排序,得到的结果应该是 12,23,3,5,9,所以反转后的结果是9, 5, 3, 23, 12
而取得的最大值应该是9
作者: Massive    时间: 2013-11-19 22:15
何丛 发表于 2013-11-19 20:57
楼主,你的list对象中存入的是字符串,String类实现了Comparable接口,覆写了compareTo方法。String类中的co ...

额,对了,我看明白他是怎么排序的了,原来他里面写的是字母,从小到大排列我看着不明显就换成了数字.忽略了这一点,谢谢,明白了.




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