Ayuda con vectores II

Monica
02 de Octubre del 2003
Muchisimas gracias a Jamecaes por la ayuda q me prestó para ordenar vectores, pero ahora tengo dos problemas con ello.

Me he dado cuenta de que cuando hay dos elementos iguales me da error. Bueno, no me avisa de ningún error, pero simplemente se queda ahí parado sin hacer nada... y no ordena. Lo que hago cuando dos elementos son iguales en el compareTo es devolver 0.

Y otra cuestión es:

¿Qué pasa si unas veces quiero que el vector esté ordenado por un criterio y otras por otro?
Es decir, la clase que yo tengo, tiene unos atributos que son inicio y fin. Ahora los ordenos por inicio, pero si en otras ocasiones, quiero ordenarlos por fin, cómo diferencio el compareTo() al llamar para ordenarlos?

Gracias de anticipado.

Un saludo. Monica.



Mario Lavarreda
02 de Octubre del 2003
//Espero que te sirva..........
//Si quieres cambiar el mayor a menor dale
// return i2-i1 al metodo compare

import java.util.*;

public class Comparer implements Comparator {

public int compare(Object obj1, Object obj2)
{
int i1 = ((Integer)obj1).intValue();
int i2 = ((Integer)obj2).intValue();

return i1- i2;
}



public static void main(String args[])
{
Vector vec = new Vector();

vec.addElement(new Integer(-200));
vec.addElement(new Integer(100));
vec.addElement(new Integer(400));
vec.addElement(new Integer(-300));
vec.addElement(new Integer(-500));
vec.addElement(new Integer(500));
vec.addElement(new Integer(-300));
/* Collections.sort(vec);
for (int i = 0; i < vec.size(); i++) {
int e=((Integer)vec.elementAt(i)).intValue();
System.out.println(i +" >> " +e);
}*/

Collections.sort(vec,new Comparer());
for (int i = 0; i < vec.size(); i++) {
int e=((Integer)vec.elementAt(i)).intValue();
System.out.println(i +" >> " +e);
}




}

}

Monica
02 de Octubre del 2003
Gracias!

jamecaes
02 de Octubre del 2003
Buenas tardes monica...

Bueno puedes hacer lo siguiente...
aunque no se que tan ortodoxo sea...

puedes definir un atributo estatico en la clase que implementa el ordenar....
antes de enviar el vector a ordenas le colocas a ese valor un true o false de acuerdo a la logica que quieras y en el compareTo() preguntas si es true hace el comaparador de una forma si no lo haces de la otra...
en resumen
para saber como hacer la comparacion utilizas un atributo estatico que te permita decidir como ordenar y cuando quieras ordenar una instruccion antes le das el valor a ese atributo para decidir como ordenas...

M?a
02 de Octubre del 2003
Hola, muchas gracias por tu ayuda, aunque lo he solucionado de otra forma. He definido unas clases que implementen Comparator y de esta manera, en cada una de ellas defino el método compare como quiero.

Después para ordenar, lo que hago es:
Comparator compInicio = new OrdenarPorInicio();
Collections.sort(v,compInicio);

Y si quiero ordenarlos por fin:
Comparator compInicio = new EventosPorFin();
Collections.sort(v,compInicio);

Tu anterior respuesta me ayudó mucho, ya que vi que el método Collections.sort() tenía varias posibilidades.

Gracias. Saludos,

Mónica.