배열에서 n 번째 가장 큰 수를 반환하는 코드를 구현했습니다. 다음은 구현 한 코드입니다.Java에서 Iterator 작업
public int getNthLargestNum(int [] givenArr, int n){
int nTotal=0;
int nNthNum = -1;
// Remove Duplicates
Set<Integer> o_hs = new TreeSet<Integer>();
for(int insert=0; insert<givenArr.length; insert++)
{o_hs.add(givenArr[insert]);}
Iterator it = o_hs.iterator();
int count=0;
while(it.hasNext()){
if(count == n){
// IF I MOVE THE LINE HERE
// nNthNum = (Integer)it.next();
break;
}
nNthNum = (Integer)it.next();
count++;
}
return nNthNum;
}
경우 I 입력 어레이 givenArr [4,14,4,5,6,8,9] 및 N = 2 출력은 상기 프로그램 5하지만 광고 nNthNum = 움직이면 (정수) it.next(); 내부에있는 if 루프는 4를 출력합니다.
그래서 루프를 반복하면서 it.next()를 구현해야하는지 궁금합니다.
세트를 사용하여 복제본을 다시 사용할 계획이었습니다. 그러나 데이터가 거대한 경우 TreeSet에서 성능이 저하됩니다. 중복을 제거하는 다른 방법이 있습니까? 나는 HashMaps를 사용할 수 있고 값으로 카운트를 저장할 수 있다는 것을 알고있다. HashMap보다 다른 대안이 있는가? – JNL
'TreeSet'는'Arrays.sort'에서 얻은 것보다 더 큰 성능을 발휘하지 않습니다. –
@JNL 데이터에 'Sort'를 호출하면 이미 SortedSet 사용시와 동일한 성능 영향을 미칩니다. 'SortedSet'에 n 개의 항목을 추가하는 것은 O (n * log (n))이고, n 개의 항목을 정렬하는 것은 O (n * log (n))입니다. 아이템을'SortedSet'에 추가하면 배열 정렬을 수행 할 필요가 없습니다. 또한 작업 데이터를 먼저 얻은 다음 필요에 따라 최적화하십시오. 잘못된 결과를내는 알고리즘을 사용하는 것이 더 빠릅니다. – Servy