2016-03-28 15 views
0

bitte helfen!Anzahl der Maximalwerte von ArrayList Java erhalten

Ich habe eine Klasse wie folgt:

public class Person { 
    private int age 
} 

Angenommen, dass ich eine Arraylist von Personentyp haben, und ich will 15 Personen mit max Alter sortieren, nehmen im Auftrag von Alter absteigend. Ich kann die Liste sortieren und dann den Wert herausnehmen, aber wenn die Liste ungefähr tausend Objekte enthält, dauert es zu viel Zeit. Welchen Weg kann ich schneller machen?

Vielen Dank. Sorry über mein Englisch!

+0

Sie können eine ** teilweise ** Blasensortierung durchführen. –

+0

Es hängt natürlich davon ab, was Sie tun, aber sind Sie sicher, dass es zu lange dauert? Das Sortieren von einer Million Objekten in einer ArrayList auf meinem nicht ganz neuen Computer mit der von Java8 zur Verfügung gestellten einfachen 'sort' dauert ungefähr 8ms, tausend sind nicht einmal leicht zu messen. –

+0

Mögliches Duplikat von [Wie bekomme ich den maximalen Wert von der List/ArrayList] (http://stackoverflow.com/questions/8304767/how-to-get-maximum-value-from-the-list-arraylist) –

Antwort

0

Versuchen Sie:

  1. Aufschalten hashcode() Verfahren effizienter zu sein (Sie sollten Überschreibung equals() auch)
  2. Verwenden TreeSet statt ArrayList - es hält sortiert Objekte.
0

Wenn Sie müssen nicht Ihre Liste neu zu sortieren, nur eine Schleife durch jedes Element ich eine Probenlösung mit einem Array zu erstellen und Sie können auf Ihrer Liste anwenden, einfach neu schreiben Sie Ihre Komparator

public static void main(String[] args) { 
    int[] a = { 3, 4, 5, 2, 3, 4, 1, 2, 4, 5, 6, 7, 4, 3, 5, 7, 2, 7 }; 
    int countMax = 0; 
    int max = -1; 
    for (int i = 0; i < a.length; i++) { 
     if (max < a[i]) { 
      countMax = 1; 
      max = a[i]; 
     } else if (max == a[i]) { 
      countMax++; 
     } 
    } 
    System.out.println(countMax); 
} 
0

Sie können versuchen zu messen.

0

Eine PriorityQueue ist eine gute Wahl für diese Art von Anforderung. Um mehr über PriorityQueue zu erfahren, folgen Sie untenstehenden Link: How do I use a PriorityQueue?

Eine Sache zu beachten ist, dass der PriorityQueue-Iterator die Elemente nicht in der richtigen Reihenfolge bereitstellt. Sie müssen die Elemente entfernen, um in der Reihenfolge über ihre Elemente zu iterieren.

Auch müssen Sie umgekehrte natürliche Reihenfolge der PriorityQueue mit collections.reverseOrder verwenden. Um mehr über die Umkehrung der natürlichen Reihenfolge PriorityQueue zu erfahren, folgen Sie untenstehenden Link: Reverse natural order using collections.reverseOrder()

0

Sortieren Sie das Array in aufsteigender oder absteigender Reihenfolge und wählen Sie je nach Bestellung entweder das erste oder das letzte Element im Array!

Collections.sort(arrayList); // Sort the arraylist 
arrayList.get(arrayList.size() - 1); //gets the last item, largest for an ascending sort 

Mehr kann here finden.