1
List<Integer> list;
java.util.Collections.max(list)

如何确定列表是否包含多个最大结果?可以这么说:如果我找到最大值,我如何确保这是集合中的唯一条目?

谢谢

4

2 回答 2

10
Integer max = Collections.max(list);
boolean containsMultipleMax = (list.indexOf(max) != list.lastIndexOf(max));
于 2012-11-17T15:48:19.467 回答
2

我会避免使用 Collections.max()。只需编写自己的方法。否则,您将遍历集合两次:一次用于 max(),它必须“查看”所有元素,第二次为 indexOf() + lastIndexOf()。

boolean containsMultipleMax;
Iterator<Integer> i = list.iterator();
Integer max = i.next();

while (i.hasNext()) {
    Integer next = i.next();
    final int cmp = next.compareTo(max);
    if (cmp > 0) {
        max = next;
        containsMultipleMax = false;
    } else if (cmp == 0) {
        containsMultipleMax = true;
    }
}

显然,这取决于您收藏的大小......如果它低于 1M,请忽略我;)。

于 2012-11-17T17:25:28.137 回答