黑马程序员技术交流社区

标题: Collections问题 [打印本页]

作者: 李小锋    时间: 2012-12-15 14:17
标题: Collections问题
本帖最后由 李小锋 于 2012-12-15 19:01 编辑
  1. List<String> list = new ArrayList<String>();

  2.                 list.add("abcd");
  3.                 list.add("aaa");
  4.                 list.add("zz");
  5.                 list.add("kkkkk");
  6.                 list.add("qq");
  7.                 list.add("z");
  8. String max = Collections.max(list);
复制代码
这里返回的max是zz,我不明白,集合中是怎么比较的,具体比较的什么,为什么会是zz呢?
作者: 焦健    时间: 2012-12-15 14:44
collections。max();取出的是集合中按自然顺序排序最大的元素。
   public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
        Iterator<? extends T> i = coll.iterator();
        T candidate = i.next();

        while (i.hasNext()) {
            T next = i.next();
            if (next.compareTo(candidate) > 0)
                candidate = next;
        }
        return candidate;
    }
这是代码,是通过迭代器进行遍历,用compareTo()方法对逐个元素进行比较的。

作者: 李亚飞    时间: 2012-12-15 14:58
比较的是字母,Z是在最后,所以返回ZZ
作者: 洪灿阳    时间: 2012-12-16 00:40
Max方法是主要通过compareto方法比较而得到最大值的。这种问题你可以到collecttion集合中去找这个方法的相应源代码。这样你就会理解它的思想了,很多问题都是这样,到它源代码就理解很快就能够知其所以然了。我个人的经验希望对你有帮助。
作者: yuchen208    时间: 2012-12-16 19:41
归根结缔是逐个比较ASCII码,
其中z ASCII 值122最大用相同的比较下一位




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