Coleccion de objetos ordenada

Nacho
18 de Mayo del 2005
Hola a todos.

Tengo que guardar una coleccion de objetos y estos han de estar ordenados por un campo entero. Que componente me recomendais? Bueno, me da igual que en el lugar donde los guarde esten ordenados o no. Lo que quiero es que segun los vaya pidiendo, me los vaya dando en orden. A priori no sabria la clave, por lo que no puedo usar una tabla hash. Seria con un iterador, pero no se que componenete me los puede servir en el lugar que los fui insertando.

Gracias

nkpevfqy
18 de Mayo del 2005
Por favor señores, no reinventemos la rueda.
La clase debe implementar Comparable o tener un Comparator para poder ordenarlos.
1) Te guardas los objetos en un Vector o ArrayList. Cuando los quieras recuperar ordenados, utiliza Collections.sort(...)
2) Utiliza un TreeMap, que los mantiene internamente ordenados y utiliza una clase. Si no tiene una clave para darle al Map, utiliza el campo por el que ordenas, siempre y cuando éste sea univoco.

rolextreme
18 de Mayo del 2005
public class QuickSort {



public static void quicksort(Puntos[] a,int large) {

quicksort(a, 0, large - 1);

}

public static void quicksort(Puntos[] a, int left, int right) {

if (right <= left) return;

int i = partition(a, left, right);

quicksort(a, left, i-1);

quicksort(a, i+1, right);



}



public static int partition(Puntos[] a, int left, int right) {

int i = left - 1;

int j = right;



while(true) {



// find item on left to swap

while (less(a[++i].cordx, a[right].cordx))

;



// find item on right to swap

while (less(a[right].cordx, a[--j].cordx))

if (j == left) break;



// check if pointers cross

if (i >= j) break;



exch(a, i, j);

}



// swap with partition element

exch(a, i, right);



return i;

}



// es x < y ?

public static boolean less(int x, int y) {

return (x < y);

}



// cambiando a[i] and a[j]

static void exch(Puntos[] a, int i, int j) {



int swap = a[i].cordx;

a[i].cordx = a[j].cordx;

a[j].cordx = swap;





int swapy = a[i].cordy;

a[i].cordy = a[j].cordy;

a[j].cordy = swapy;



}



}

Esta clase una vez la implemente, ya que tenia un conjunto de objetos puntos y ademas en el guardaba coordenadas x e y, pero como la inserccion era de forma aleatoria no sabia como ordenarlos, pero ya una vez ingresados solo colocaba el campo por el cual fueran ordenados y ya esta, en todo caso te envio la clase Puntos para que puedas comprender el funcionamiento de esta misma:

public class Puntos{

int x;
int y;

public Puntos(int x, int y){
this.x=x;
this.y=y;
}

}

Espero que puedas sacar provecho a la presente clase y sus metodos....

Atentamente

rolextreme