List<Integer> list;
java.util.Collections.max(list)
목록에 최대 결과가 두 개 이상 있는지 어떻게 확인할 수 있습니까? 말하자면 : 최대 값을 찾았다면이 값이 컬렉션의 유일한 항목인지 어떻게 확인할 수 있습니까?둘 이상의 최대 결과가 포함 된 컬렉션을 확인하는 방법은 무엇입니까?
감사
List<Integer> list;
java.util.Collections.max(list)
목록에 최대 결과가 두 개 이상 있는지 어떻게 확인할 수 있습니까? 말하자면 : 최대 값을 찾았다면이 값이 컬렉션의 유일한 항목인지 어떻게 확인할 수 있습니까?둘 이상의 최대 결과가 포함 된 컬렉션을 확인하는 방법은 무엇입니까?
감사
Integer max = Collections.max(list);
boolean containsMultipleMax = (list.indexOf(max) != list.lastIndexOf(max));
이것은 발견 된 첫 번째와 마지막으로 발견 된 것에서 부울을 생성합니다. 맞습니까? –
@JamesPoulson : 예, 그렇습니다. –
목록의 시작 부분부터 시작하여 목록에 최대 값이 표시됩니다. 목록의 끝에서 시작하여 목록에 최대 값이 표시됩니다. 두 개의 발견 된 인덱스가 일치하지 않으면 최대 값은 목록에서 두 번 이상입니다. 일치하는 경우 목록의 최대 값은 한 번입니다. –
내가 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 미만인 경우 무시하십시오;).
중복이 없음을 의미합니까? –
문맥을 좀주세요. 귀하의 필요에 따라 세트가 더 적합 할 수도 있고 그렇지 않을 수도 있습니다. –