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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Massive 中级黑马   /  2013-11-19 18:45  /  1188 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 ,这里就不明白了,求解释一下.是不是一般不这么用啊.

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

2 个回复

倒序浏览
楼主,你的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

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
何丛 发表于 2013-11-19 20:57
楼主,你的list对象中存入的是字符串,String类实现了Comparable接口,覆写了compareTo方法。String类中的co ...

额,对了,我看明白他是怎么排序的了,原来他里面写的是字母,从小到大排列我看着不明显就换成了数字.忽略了这一点,谢谢,明白了.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马