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()の使用は避けたいと思います。独自のメソッドを作成するだけです。それ以外の場合は、コレクションを2回トラバースします。1回目はすべての要素を「表示」する必要があるmax()で、2回目は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 に答える