2013-07-09 24 views
5

Ich habe eine Arraylist mit ganzen Zahlen gefüllt. Ich brauche nur einen Weg, um die ersten drei ganzen Zahlen in der Arraylist zu bekommen.Top 3 der höchsten Werte in Arraylist erhalten?

+0

Aus den Antworten ist klar, dass es zwei Interpretationen Ihrer Frage gibt. Willst du die ersten 3 oder die 3 größten Gegenstände? – andy256

Antwort

0

Sie müssen Ihren eigenen Komparator schreiben und Collections.sort(list, comparator) auf Ihrem ArrayList verwenden, was die oberen 3 Ganzzahlen an die Spitze bringen wird (dies basiert rein auf der Logik in Ihrem Komparator).

+0

Dann subList tun? – kosa

+0

Nun, das ist das OP. Selbst wenn er eine Unterliste erstellt, muss er immer noch die Liste durchqueren, um sie zu bekommen. Stattdessen könnte er einfach die sortierte Liste bis zur 3. Position durchlaufen und die Werte erhalten! IMHO, wir sollten diesen Teil dem OP überlassen! – SudoRahul

+0

Wenn ich mir die Frage und die Tags anschaue, denke ich, dass es mehr darum geht, die Liste zu sortieren, als alles andere! – SudoRahul

0

Verwendung Collections.sort sortieren und die ersten drei Werte

0

Setzen Sie alle Elemente in einen TreeSet mit TreeSet(Collection c) Konstruktor abrufen dann TreeSet.descendingIterator verwenden, um die ersten drei Elemente zu erhalten. Eine Liste kann Duplikate enthalten, wobei TreeSet-Garantien verwendet werden, um 3 verschiedene größte Werte abzurufen.

4
List<Integer> list; 
Collections.sort(list); 
List<Integer> top3 = new ArrayList<Integer>(list.subList(list.size() -3, list.size())); 

ich einfach die subList hätte verwendet, aber die Liste zurück von subList() ist eine Ansicht auf der Basisliste, so ändert sich in top3 reflektiert würden gemacht.

1

Nutzen Sie List#subList(int fromIndex,int toIndex)

Gibt einen Blick auf den Teil dieser Liste zwischen dem angegebenen fromindex einschließlich und toIndex, exklusiv.

yourList.subList(yourList.size() -n, yourList.size()); 

Wie pro sublist docs

0

Es hängt von der Größe der Liste und welche Leistung Sie wollen. Wenn die Liste "klein" ist, dann wird jede der früheren Lösungen ausreichen, abhängig von Ihren Anforderungen.

Wenn die Liste "groß" ist und die Leistung wichtig ist, sollten Sie die Liste durchlaufen und die 3 größten beibehalten.

Ein weiterer Kompromiss ist Ihre Zeit und Bugs gegen die Verwendung von Bibliotheken. Einer der genannten Bibliotheksansätze wird in weniger Ihrer Programmierzeit funktionieren als eine benutzerdefinierte Lösung

Verwandte Themen