Ho un arraylist pieno di interi. Ho solo bisogno di un modo per ottenere i primi tre numeri interi nell'arrayist.Ottenere i primi 3 valori più alti nell'arrayist?
risposta
È necessario scrivere il proprio comparatore e utilizzare Collections.sort(list, comparator)
sul proprio ArrayList
, che porterà i primi 3 numeri interi in cima (questo è puramente basato sulla logica nel comparatore).
Quindi fare sottocategoria? – kosa
Bene, questo dipende dall'OP. Anche se fa una sottolista, dovrà comunque attraversare la lista per ottenerli. Invece potrebbe semplicemente attraversare la lista ordinata, fino alla 3a posizione e ottenere i valori! IMHO, dovremmo lasciare quella parte all'OP! – SudoRahul
Guardando la domanda e i tag, penso che questo sia più su come ordinare la lista, che su qualsiasi altra cosa! – SudoRahul
uso Collections.sort per ordinare e recuperare i primi tre valori
Mettere tutti gli elementi in un TreeSet
utilizzando TreeSet(Collection c)
costruttore quindi utilizzare TreeSet.descendingIterator
per ottenere i primi 3 elementi. Un elenco può contenere duplicati, utilizzando TreeSet garantisce di recuperare 3 valori distinti più grandi.
List<Integer> list;
Collections.sort(list);
List<Integer> top3 = new ArrayList<Integer>(list.subList(list.size() -3, list.size()));
ho potuto usare semplicemente sottolista, ma l'elenco restituito da sottoelenco() è una vista sulla lista di base, pertanto le modifiche effettuate ci sarebbe riflessa in top3.
Fare uso di List#subList(int fromIndex,int toIndex)
Restituisce una vista della porzione di questa lista tra il fromIndex specificato, inclusivo, e toIndex, esclusivo.
yourList.subList(yourList.size() -n, yourList.size());
Come da documentazione sottolista
Essa dipende dalla dimensione della lista e ciò che si desidera prestazioni. Se l'elenco è "piccolo", qualsiasi soluzione precedente sarà sufficiente, a seconda delle esigenze.
Se l'elenco è "grande" e le prestazioni sono importanti, è necessario scorrere l'elenco e mantenere i 3 più grandi man mano che si procede.
Un altro compromesso è il tuo tempo e bug vs utilizzando le librerie. Uno degli approcci bibliografici menzionati funzionerà in meno del tempo del programmatore rispetto a una soluzione con codice personalizzato
Dalle risposte ricevute è chiaro che ci sono due interpretazioni della tua domanda. Vuoi i primi 3 articoli o i 3 oggetti più grandi? – andy256