Я реализовал код для возврата n-го самого большого числа в массиве, Ниже приведен код, который я реализовал;Работа Итератора в Java
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;
}
Если я входной массив givenArr [4,14,4,5,6,8,9] и п = 2 выход 5 для вышеуказанной программы, но если я переместить линию nNthNum = (целое число) it.next(); внутри цикла if, который он выдает 4.
Так что мне было любопытно узнать, чтобы итерация через цикл мы всегда должны реализовывать it.next()?
Я планировал использовать Set для повторного воспроизведения дубликатов. Но TreeSet предпримет ударный удар, если данные будут огромными? Есть ли другой способ удаления дубликатов. Я понимаю, что могу использовать HashMaps и хранить счет как значение, есть ли другая альтернатива, кроме HashMap? – JNL
'TreeSet' не повлечет за собой большего увеличения производительности, чем вы уже получили от' Arrays.sort'. –
@JNL Вызов 'Sort' на ваши данные уже будет иметь равное влияние производительности на использование' SortedSet'. Добавление n элементов в 'SortedSet' равно O (n * log (n)), сортировка n элементов - O (n * log (n)). Добавляя элементы в 'SortedSet', вам не понадобится * для сортировки массива. Кроме того, сначала сосредоточьтесь на получении рабочих данных, а затем оптимизируйте по мере необходимости. Нет смысла использовать алгоритм, который быстрее, когда он производит неверный результат. – Servy