Foros del Web » Programación para mayores de 30 ;) » Java »

Ordenar LinkedList

Estas en el tema de Ordenar LinkedList en el foro de Java en Foros del Web. Buenas, tengo un LinkedList y me gustaria ordenarlo por un campo llamado codigo que es string, y si hay varios con el mismo codigo ordenarlo ...
  #1 (permalink)  
Antiguo 04/07/2012, 10:53
 
Fecha de Ingreso: diciembre-2010
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 0
Ordenar LinkedList

Buenas,

tengo un LinkedList y me gustaria ordenarlo por un campo llamado codigo que es string, y si hay varios con el mismo codigo ordenarlo por otro string llamado codigosecundario, como tendria que hacerlo?

Soy nuevo en java, y la verdad es que llevo horas buscando por internet... he leido que podria ordenarse por bubble sort, mergesort...pero los ejemplos que hay usan array en vez de linkedsort y me pierdo en los cambios.

Saludos y gracias adelantadas.
  #2 (permalink)  
Antiguo 04/07/2012, 15:01
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Ordenar LinkedList

Buenas,

¿La ordenación debe ser hecha manualmente o pueden usar método que viene incluido en el JDK de Java?

Si se puede usar métodos del JDK, te propongo que uses el método Collections.sort.

Código Java:
Ver original
  1. Collections.sort(lista,new Comparator<Tipo>{
  2.  
  3. @Override
  4. public int compare(Tipo  arg0, Tipo arg1) {
  5.  
  6. int compare = arg0.codigo.compareTo(arg1.codigo);
  7.  
  8. if (compare != 0)
  9. return compare
  10. else {
  11.  return arg0.codigosecundario.compareTo(arg1.codigosecundario);
  12. }
  13. }
  14.  
  15. }

Saludos.
  #3 (permalink)  
Antiguo 04/07/2012, 16:27
 
Fecha de Ingreso: diciembre-2010
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ordenar LinkedList

La ordenacion debe ser hecha manualmente.

Gracias de todas formas por intentar ayudar.
Saludos ^^
  #4 (permalink)  
Antiguo 04/07/2012, 17:44
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Ordenar LinkedList

Puedes usar mergeSort.

Te dejo una implementación que se me ha ocurrido:

Código Java:
Ver original
  1. LinkedList<String> cadenas = new LinkedList<String>();
  2.         Collections.addAll(cadenas, "Hola", "Esteban", "Mañana", "Deseo", "Adios", "Alvaro", "Abierto");
  3.  
  4.         LinkedList<String> ordenadas = MergeSort(cadenas, new Comparator<String>() {
  5.  
  6.             @Override
  7.             public int compare(String o1, String o2) {
  8.                 return o1.compareTo(o2);
  9.             }
  10.         });


Código Java:
Ver original
  1. public static <T> LinkedList<T> MergeSort(LinkedList<T> lista, Comparator<T> comparador) {
  2.  
  3.  
  4.         if (lista.size() > 1) {
  5.             LinkedList<T> lista1, lista2;
  6.  
  7.             int corte = lista.size() / 2;
  8.             lista1 = new LinkedList<T>(lista.subList(0, corte));
  9.             lista2 = new LinkedList<T>(lista.subList(corte, lista.size()));
  10.  
  11.             lista1 = MergeSort(lista1, comparador);
  12.             lista2 = MergeSort(lista2, comparador);
  13.             return Merge(lista1, lista2, comparador);
  14.         } else {
  15.             return lista;
  16.         }
  17.  
  18.  
  19.     }
  20.  
  21.     private static <T> LinkedList<T> Merge(LinkedList<T> lista1, LinkedList<T> lista2, Comparator<T> comparador) {
  22.         LinkedList<T> listaSalida = new LinkedList<T>();
  23.  
  24.  
  25.         while (lista1.size() > 0 || lista2.size() > 0) {
  26.  
  27.  
  28.             if (lista2.size() == 0 || lista1.size() > 0 && comparador.compare(lista1.getFirst(), lista2.getFirst()) <= 0) {
  29.                 listaSalida.add(lista1.pollFirst());
  30.             } else if (lista1.size() == 0 || lista2.size() > 0 && comparador.compare(lista1.getFirst(), lista2.getFirst()) > 0) {
  31.                 listaSalida.add(lista2.pollFirst());
  32.             }
  33.         }
  34.         return listaSalida;
  35.  
  36.     }

En esta implementación uso Strings, pero puedes cambiarlo por el tipo que quieras usando un comparador personalizado (como el que te he puesto en el post anterior).

Saludos.
  #5 (permalink)  
Antiguo 09/07/2012, 02:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ordenar LinkedList

Gracias alexg88, me ha servido de mucho ^^

Etiquetas: string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:07.