2012-04-13 12 views
7

Also ich möchte eine Arraylist von Objekten in Java.Wie sortiere ich eine Arraylist von Objekten Java?

Ich habe object1.number und object2.number, object3.number, etc ... aber diese Objekte haben andere Eigenschaften außer number, wie name, distance, etc ...

Also, wenn es eine Zeichenfolge in einem array sortiert es wäre einfach, legte eine Zeichenfolge in eine temporal und lassen Sie die andere Zeichenfolge an ihre Stelle ... aber in einer araryList von Objekten, wie kann ich es tun?

Kann ich Objekte einfach an diese Position des Arrays verschieben?

Danke.

+2

Hat Ihr Professor möchten Sie den Sortieralgorithmus selbst zu implementieren? –

+0

was @joncarl sagt, ist ein guter Punkt, wenn Sie also bubblesort betrachten müssen (es ist ziemlich einfach zu implementieren, aber nicht so schnell) –

+0

Ja, ich werde Insertion sort alg implementieren. – user1253201

Antwort

0

Sie müssen Komparator für diesen Zweck verwenden. wegen generischer Syntax

4

Sie benötigen die vergleichbare Schnittstelle

implements Comparable

das Verfahren zu implementieren, das macht die Arbeit ist

public int compareTo(Object obj) 
{ 
} 

Bitte beachten Sie, dass das Objekt oft von einer voll auf Typen ersetzt wird was in der implements-Anweisung (siehe unten) verwendet werden kann.

Ein vollständiges Beispiel ist here in the tutorial docs Hoffnung dieses

Ein vollständiges Beispiel hilft (nehmen Sie aus dem obigen Link ist wie folgt), ich habe dies geht nur für den Fall hinzugefügt der Link zu einem bestimmten Zeitpunkt

import java.util.*; 

public class Name implements Comparable<Name> { 
    private final String firstName, lastName; 

    public Name(String firstName, String lastName) { 
     if (firstName == null || lastName == null) 
      throw new NullPointerException(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String firstName() { return firstName; } 
    public String lastName() { return lastName; } 

    public boolean equals(Object o) { 
     if (o == null || !(o instanceof Name)) 
      return false; 
     Name n = (Name) o; 
     return n.firstName.equals(firstName) && n.lastName.equals(lastName); 
    } 

    public int hashCode() { 
     return 31*firstName.hashCode() + lastName.hashCode(); 
    } 

    public String toString() { 
    return firstName + " " + lastName; 
    } 

    public int compareTo(Name n) { 
     int lastCmp = lastName.compareTo(n.lastName); 
     return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName)); 
    } 
} 
tot

der Client-Code aus dem Artikel ist:

import java.util.*; 

public class NameSort { 
    public static void main(String[] args) { 
     Name nameArray[] = { 
      new Name("John", "Smith"), 
      new Name("Karl", "Ng"), 
      new Name("Jeff", "Smith"), 
      new Name("Tom", "Rich") 
     }; 

     List<Name> names = Arrays.asList(nameArray); 
     Collections.sort(names); 
     System.out.println(names); 
    } 
} 
0

Basierend auf Ihrer Frage, ich nehme an, Sie sollen sie den Sortieralgorithmus zu implementieren. Wenn dies der Fall ist, können Sie die Position von Elementen innerhalb einer ArrayList manipulieren, es funktioniert nur ein bisschen anders als ein normales Array. Schauen Sie sich die add(int index, E element) an. Mit dem Parameter index können Sie festlegen, wo in der ArrayList das Element hinzugefügt werden soll.

+0

Ich denke, dass Sie ihn an die Set-Methode anstelle der Add-Methode verweisen möchten. Die Add-Methode verschiebt Elemente, statt sie zu ersetzen. –

+0

@ColonD Nicht unbedingt. Während Sie ein Element durch ein anderes ersetzen können, können Sie auch ein Element entfernen und es dann an seine neue Position platzieren, hängt etwas von dem Algorithmus ab. –

+0

Wenn Sie nicht mit einem sortierten Array beginnen und neue Elemente hinzufügen, wird die Verwendung von add() zu Leistungseinbußen führen, da alle Elemente mit höheren Indizes verschoben werden müssen. Gleiches gilt für remove(). Die Verwendung von set() ist die O (1) -Methode zum Aktualisieren von Einträgen in dem Array, was zum Sortieren gewünscht ist. –

8

Implementieren Sie Ihre eigenen Vergleich:

Arrays.sort(yourArray, new Comparator<YourClass>() { 
     @Override 
     public int compare(YourClass o1, YourClass o2) { 
      //compare object properties 
     } 
}); 
+2

Sie meinen 'Collections' not Arrays, er hat es hier mit einer' ArrayList'? –

+0

Eine ArrayList ist eine Sammlung. –

+0

Arrays.sort ist für Arrays wie 'Object []'. Um eine ArrayList zu sortieren, wie in der Frage erwähnt, würden Sie 'Collections.sort' verwenden, wie von @Papa_Jay gezeigt. – njzk2

0

Gebrauch zu Collections.sort() 8 eine Arraylist in Java zu sortieren:

Collections.sort(array, new Comparator<Class>() { 
    @Override 
    public int compare(Class o1, Class o2) { 
     //compare object properties 
    } 
}); 
Verwandte Themen