2012-04-13 13 views
7

Así que quiero una lista de objetos en Java.¿Cómo ordenar una lista de arrays de objetos java?

tengo object1.number y object2.number, object3.number, etc ... pero esos objetos tienen otras propiedades además de number, como name, distance, etc ...

Así que si estaba clasificando una cadena en un array se Sería simplemente, poner una cadena en un temporal y dejar que la otra cadena tome su lugar ... pero en un araryList de objetos, ¿cómo puedo hacerlo?

¿Puedo simplemente mover objetos a esa posición de la matriz?

Gracias.

+2

¿Su profesor desea usted para implementar el algoritmo de ordenación ti mismo? –

+0

lo que @joncarl dice es un buen punto, si es así, debe considerar bubblesort (es bastante fácil de implementar pero no tan rápido) –

+0

Sí, implementaré la inserción sort alg. – user1253201

Respuesta

0

Es necesario utilizar el comparador para este fin.

4

que necesita para implementar la interfaz comparables

implements Comparable

el método que hace el trabajo es

public int compareTo(Object obj) 
{ 
} 

Tenga en cuenta que objeto a menudo se sustituye por un lleno en el tipo a causa de sintaxis genérica que se puede usar en la instrucción de implementaciones (que se muestra a continuación).

Un ejemplo completo es here in the tutorial docs esperanza esto ayuda

un ejemplo completo (tomar desde el enlace anterior es la siguiente), he añadido este acaso el enlace se agota en algún momento

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

el código de cliente del artículo es:

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

sobre la base de su pregunta, ¿Puedo entender que se supone que deben ser la ejecución del algoritmo de ordenación sí mismo. Si ese es el caso, puede manipular la posición de los elementos dentro de una ArrayList, simplemente funciona de manera diferente a una matriz normal. Eche un vistazo al add(int index, E element). El parámetro index le permite decidir dónde en ArrayList agregar el elemento.

+0

Creo que quiere dirigirlo al método set en lugar del método add. el método add, desliza los elementos en lugar de reemplazarlos. –

+0

@ColinD No necesariamente. Si bien podría reemplazar un elemento por otro, también podría eliminar un elemento y luego colocarlo en su nueva posición, de alguna manera depende un poco del algoritmo. –

+0

A menos que esté mirando con una matriz ordenada y agregue nuevos elementos, el uso de add() tendrá penalizaciones de rendimiento ocultas porque necesita cambiar todos los elementos que tienen índices más altos. Lo mismo aplica para remove(). El uso de set() es la forma O (1) para actualizar las entradas en la matriz, que es lo que desea para ordenar. –

8

implementar su propio comparador:

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

¿Quiere decir 'Colecciones 'no Arrays, él está tratando con' ArrayList' aquí? –

+0

Una ArrayList es una Colección. –

+0

Arrays.sort es para matrices, como 'Object []'. Para ordenar una ArrayList, como se menciona en la pregunta, usaría 'Collections.sort', como lo señala @Papa_Jay. – njzk2

0

Uso de Collections.sort() para ordenar un ArrayList en Java 8:

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