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

목록에 최대 결과가 두 개 이상 있는지 어떻게 확인할 수 있습니까? 말하자면 : 최대 값을 찾았다면이 값이 컬렉션의 유일한 항목인지 어떻게 확인할 수 있습니까?둘 이상의 최대 결과가 포함 된 컬렉션을 확인하는 방법은 무엇입니까?

감사

+0

중복이 없음을 의미합니까? –

+0

문맥을 좀주세요. 귀하의 필요에 따라 세트가 더 적합 할 수도 있고 그렇지 않을 수도 있습니다. –

답변

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 미만인 경우 무시하십시오;).

관련 문제