Java - ordenar objetos alfabéticamente ArrayList

 
Vista:

ordenar objetos alfabéticamente ArrayList

Publicado por Jose (1 intervención) el 30/01/2010 13:25:55
Hola. Soy nuevo en esto de Java, he empezado a estudiar Teleco este año, y bueno, nos han pedido hacer una especie de programa para gestionar un taller.
Mi problema es que tengo que ordenar los vehiculos de manera alfabetica segun sus matriculas. La clase Matricula tiene varios datos miembro, y el principal, es un String matricula. Despues tengo varios metodos como asignarMatricula (String mat), vamos, no tengo ningun constructor que vaya por argumentos.
En definitva, tengo otra clase que gestiona todo lo de los Arrays, y cuando meto un vehiculo por teclado, el metodo lo debe meter en la posicion que le corresponda alfabéticamente en el ArrayList. Me podrían decir como hacerlo??He buscado en muchos foros y he preguntado pero no me aclaro, sé que es con compareTo pero si me peuden explicar ocmo implementarlo..Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ordenar objetos alfabéticamente ArrayList

Publicado por zoser (4 intervenciones) el 31/01/2010 10:15:08
Hola,

Un ArrayList no es un conjunto ordenado. Si en la practica te piden que utilices un ArrayList tienes que ordenarlo después de cada inserción. Si no te piden un ArrayList puedes utilizar un OrderedSet. En los dos casos para ordenar la colección de objetos estos deben de implementar el interface Comparable (con el método compareTo).

Por otra parte, creo que matricula debería ser un atributo de vehículo y no una clase independiente.

ejemplo:

public class Vehiculo implements Comparable {

//tus definiciones de atributos y metodos
private String matricula;
public String getMatricula(){
...
}

public int compareTo(Object object) {

int result = 0;

if (!this.equals (object)) {
if(object instanceof Vehiculo){
Vehiculo vehiculo = (Vehiculo)object;
if(this.getMatricula().compareTo(vehiculo.getMatricula()) < 0){
result = -1;
}else if(this.getMatricula().compareTo(vehiculo.getMatricula()) > 0) {
result = 1;
}
}
}
return result;
}
}

Para ordenar el ArrayList:

Collections.sort(tu_arraylist);

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar objetos alfabéticamente ArrayList

Publicado por Jose (6 intervenciones) el 31/01/2010 14:27:12
Hola de nuevo. Muchas gracias por responderme, pero sigo teniendo alguna duda. Si no le importa pongo mi código y así me lo podría aclarar mejor. No sé si el CompareTo lo tengo bien implementado, además me da error en la última llave del programa, me dice class, interface or enum expected. Si me puede decir como lo haría con mi código y enterarme así de cómo va...por favor, respondame, muchísimas gracias!

(El código en sí no es largo, lo único es que tiene ya hecha la documentación)

public class Vehiculo implements Comparable{
//Aquí declaramos los datos miembro que utilizaremos
public String matricula;
//Tendremos que poner la matricula pública porque sino no podremos trabajar
//en la clase Taller adecuadamente.
private String modelo;
private String tipo;
private String aniocompra;
private boolean enreparacion;

/**Constructor predeterminado
*/
Vehiculo(){
//Creamos un constructor por defecto
matricula="";
modelo="";
tipo="";
aniocompra="";
enreparacion=false;
}//Fin constructor Vehiculo por defecto

/**Asigna la matricula del vehiculo
* @param mat Matricula del vehículo
*/
void asignarMatricula(String mat){
matricula=new String(mat);
}//Fin metodo asignarMatricula

/**Asigna el modelo del vehiculo
* @param mod Modelo del vehículo
*/
void asignarModelo (String mod){
modelo=new String(mod);
}//Fin metodo asinarModelo

/**Asigna el tipo de vehículo, ya sea turismo (t), furgoneta (f)
* o motocicleta(m)
* @param t Tipo de vehiculo
*/
void asignarTipo (String t){
tipo=t;
}//Fin metodo asinarTipo

/**Asigna el año de compra del vehículo
* @param a Año de compra del vehículo
*/
void asignarAnioCompra(String a) {
aniocompra=a;
}//Fin metodo asignarAnioCompra

/**Asigna si el vehículo está siendo reparado actualmente (true=si, false=no)
* @param r Estado actual del vehículo (en reparación)
*/
void asignarEnReparacion(boolean r) {
enreparacion=r;
}//Fin metodo asignarAnioCompra

/**Imprime por pantalla la matricula del vehiculo
*/
void mostrarMatricula(){
System.out.println("Matricula: " +matricula);
}//Fin metodo mostrarMatricula

/**Imprime por pantalla el modelo del vehiculo
*/
void mostrarModelo(){
System.out.println ("Modelo: " +modelo);
}//Fin metodo mostrarModelo

/**Imprime por pantalla el tipo de vehículo (t:turismo, m:motocicleta, f:furgoneta)
*/
void mostrarTipo(){
System.out.println ("Tipo: "+tipo);
}//Fin metodo mostrarTipo

/**Imprime por pantalla el año de compra del vehículo
*/
void mostrarAnioCompra (){
System.out.println ("Año de compra: "+aniocompra);
}//Fin metodo mostrarDNI

/**Imprime por pantalla si el vehiculo esta siendo reparado o no (true:si, false:no)
*/
void mostrarEnReparacion (){
System.out.println("¿En reparación?: "+enreparacion);
}//Fin mostrarReparando

public String getMatricula(){
return this.matricula;
}




//Como en la clase Cliente, debemos crear un método toString para que nos imprima
//los vehículos correctamente.
/**Devulve los datos del objeto en forma de cadena
*/
public String toString(){
return new String("Matricula: "+matricula+ "\nModelo: "+modelo+ "\nTipo: "+tipo+ "" +
"\nAño de compra: "+aniocompra+ "\n¿En reparación?: "+enreparacion);
}//Fin metodo toString

//Con este método imprimiremos los datos de los vehículos.
/**Imprime por pantalla, a la vez, todos los datos del vehiculo
*/
void imprimirV(){
System.out.println("Matricula: "+matricula);
System.out.println("Modelo: "+modelo);
System.out.println("Tipo (t=turismo // f=furgoneta // m=motocicleta) : "+tipo);
System.out.println("Fecha de compra (dd/mm/aaaa): "+aniocompra);
System.out.println("¿Actualmente en reparacion? (true: si // false: no) : "+enreparacion);
}//Fin del método imprimirV

public int compareTo(Object object) {
int result=0;
if (!this.equals (object)) {
if(object instanceof Vehiculo){
Vehiculo vehiculo = (Vehiculo)object;
if(this.getMatricula().compareTo(vehiculo.getMatricula()) < 0){
result = -1;
}else if(this.getMatricula().compareTo(vehiculo.getMatricula()) > 0) {
result = 1;
}
}
}
return result;
}
}



}//Fin clase Vehiculos (error ya mencionado)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ordenar objetos alfabéticamente ArrayList

Publicado por zoser (4 intervenciones) el 01/02/2010 13:20:03
Hola,

Comprueba las llaves, sobra una.

Matricula puedes declararla como privada y utilizar el método getMatricula() en la clase Taller.

compareTo lo podríamos simplificar un poco eliminando las comprobaciones de seguridad y eliminando la llamada a getMatricula() y quedaría así:

public int compareTo(Object object) {
int result=0;
Vehiculo vehiculo = (Vehiculo)object;
if(this.matricula.compareTo(vehiculo.matricula) < 0){
result = -1;
}else if(this.matricula.compareTo(vehiculo.matricula) > 0) {
result = 1;
}
}
return result;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar