Ayuda con vectores II
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.
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.
//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);
}
}
}
//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);
}
}
}
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...
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...
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.
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.