2012-04-13 39 views
7

Quindi voglio un arraylist di oggetti in java.Come ordinare un arraylist di oggetti java?

ho object1.number e object2.number, object3.number, ecc ... ma quegli oggetti che hanno altre proprietà oltre number, come ad esempio name, distance, ecc ...

Quindi, se è stato ordinamento una stringa in un array esso sarebbe semplicemente, mettere una stringa in un temporal e lasciare che l'altra stringa prendesse il suo posto ... ma in uno araryList di oggetti, come posso farlo?

Posso semplicemente spostare gli oggetti in quella posizione dell'array?

Grazie.

+2

Il vostro professore desidera di implementare l'algoritmo di ordinamento te stesso? –

+0

quello che @joncarl dice è un buon punto, se è così è necessario guardare a bubblesort (è abbastanza facile da implementare ma non così veloce) –

+0

Sì, implementerò l'inserimento di tipo alg. – user1253201

risposta

0

È necessario utilizzare il comparatore per questo scopo.

4

è necessario implementare l'interfaccia paragonabile

implements Comparable

il metodo che fa il lavoro è

public int compareTo(Object obj) 
{ 
} 

prega di notare che oggetto è spesso sostituito da un pieno sul tipo a causa della sintassi generica che può essere utilizzato nell'istruzione implements (mostrato sotto).

Un esempio completo è here in the tutorial docs speranza che questo aiuta

Un esempio completo (prendere dal link qui sopra è il seguente), ho aggiunto questo solo nel caso in cui il link si esaurisce ad un certo punto

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)); 
    } 
} 

il codice client dal l'articolo è:

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

in base alla tua domanda, io lo prendo che si suppone di essere implementare l'algoritmo di ordinamento da soli. In tal caso, è possibile modificare la posizione degli elementi all'interno di ArrayList, ma funziona in modo leggermente diverso rispetto a un array normale. Dai uno sguardo allo add(int index, E element). Il parametro index consente di decidere in quale posizione in ArrayList aggiungere l'elemento.

+0

Penso che tu voglia indirizzarlo al metodo set invece del metodo add. il metodo aggiungi, fa scorrere gli elementi invece di sostituirli. –

+0

@ColinD Non necessariamente. Mentre puoi sostituire un elemento con un altro, puoi anche rimuovere un elemento e quindi metterlo nella sua nuova posizione, in un certo senso dipende un po 'dall'algoritmo. –

+0

A meno che tu non stia fissando una matrice ordinata e aggiungendo nuovi elementi, l'uso di add() avrà penalizzazioni prestazionali nascoste perché deve spostare tutti gli elementi che hanno indici più alti. Lo stesso vale per remove(). L'utilizzo di set() è il modo O (1) per aggiornare le voci nell'array, che è ciò che si desidera per l'ordinamento. –

8

implementare il proprio operatore di confronto:

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

Significa 'Collezioni' non Array, ha a che fare con un' ArrayList' qui? –

+0

Un ArrayList è una raccolta. –

+0

Arrays.sort è per matrici, come 'Oggetto []'. Per ordinare una lista di array, come menzionato nella domanda, si utilizzerà 'Collections.sort', come indicato da @Papa_Jay. – njzk2

0

Utilizzare per Collections.sort() per ordinare un ArrayList in Java 8:

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