2012-11-17 60 views
1
List<Integer> list; 
java.util.Collections.max(list) 

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

感谢

+0

你是说,它没有重复? –

+0

请给我一些背景吗?根据您的需要,Set可能更适合或不适合。 –

回答

10
Integer max = Collections.max(list); 
boolean containsMultipleMax = (list.indexOf(max) != list.lastIndexOf(max)); 
+0

这是从第一个找到的最大值和最后找到的值生成一个布尔值。正确吗? –

+1

@JamesPoulson:是的,就是这样。 –

+0

它从列表的开头开始查找列表中最大值的位置。它从列表的末尾开始查看列表中最大值的位置。如果两个找到的索引不匹配,则最大值至少在列表中两次。如果它们匹配,则列表中的最大值只有一次。 –

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,就忽略我;)。

相关问题