bloque4:comparable
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
bloque4:comparable [12/03/2018 10:33] – [Reglas de implementación] Fernando Valdeón | bloque4:comparable [04/09/2018 08:06] (actual) – borrado Fernando Valdeón | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | | ||
- | Cuando una clase implementa una interface, obliga a sobrescribir los métodos de esa interface. En Java tenemos muchas interfaces para hacer que nuestras clases tengan una forma común. | ||
- | La interfaz Comparable nos servirá para poder ordenar colecciones de objetos (Arrays, ArrayLists, LinkedLists, | ||
- | ===== Interface Comparable ===== | ||
- | La interface Comparable se usa para obligar a las clases que la implementan a definir sus métodos, de cara a poder ser ordenados. Esta interface solo tiene un método: '' | ||
- | |||
- | https:// | ||
- | |||
- | Cuando una clase implementa la interface Comparable, es posible ordenar mediante los métodos de las clases de Java, Arrays o colecciones de tipo list, por poner ejemplos. | ||
- | * '' | ||
- | * '' | ||
- | |||
- | ==== Método compareTo() ==== | ||
- | El método '' | ||
- | * Devuelve 0 en caso de que ambos objetos tengan el mismo orden (no haya uno mayor que otro) | ||
- | * Un número entero negativo si el objeto actual es menor al objeto pasado como parámetro | ||
- | * Un número positivo si el objeto actual es mayor al objeto pasado como parámetro | ||
- | |||
- | La interfaz Comparable es implementada por una clase según la siguiente definición: | ||
- | <code java> | ||
- | public class Coche implements Comparable< | ||
- | … | ||
- | | ||
- | … | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Así indicamos que vamos a implementar la interface '' | ||
- | |||
- | ==== Criterios de órden ==== | ||
- | A continuación, | ||
- | |||
- | Por ejemplo, podemos definir que un coche con un LocalDate fechaMatriculación mayor que otro, es un coche mayor. O que un coche con un String matrícula menor que otra será un objeto menor, o el nº de km, etc. | ||
- | |||
- | Una vez tengamos seleccionado el atributo/s que indicará quien es mayor, debemos implementar el método compareTo() a partir de la comparación de esos atributos. Si el atributo es una referencia a un objeto, podemos usar el método compareTo() de esa clase de objetos, si lo tienen implementado. En el caso de los Strings, ya tienen implementado la interface Comparable, y tienen su propio método compareTo(). Esto mismo ocurrirá con distintos objetos de clases de la API de Java. Si queremos que nuestros objetos sean ordenables deben implementar esta interface. | ||
- | |||
- | Ejemplos de implementación del método compareTo(): | ||
- | <code java> | ||
- | // | ||
- | public int compareTo(Coche otro){ | ||
- | return this.km – otro.km; | ||
- | } | ||
- | </ | ||
- | |||
- | <code java> | ||
- | // | ||
- | public int compareTo(Coche otro){ | ||
- | return fechaMatriculacion.compareTo(otro.fechaMatriculacion); | ||
- | // Devuelvo lo que devuelve el método compareTo() de LocalDate | ||
- | } | ||
- | </ | ||
- | |||
- | <code java> | ||
- | // | ||
- | public int compareTo(Coche otro){ | ||
- | return matricula.compareTo(otro.matricula); | ||
- | // Devuelvo lo que devuelve el método compareTo() de String | ||
- | } | ||
- | </ | ||
- | |||
- | ==== Reglas de implementación ==== | ||
- | Además, tal y como se comenta en la API sobre la interface [[https:// | ||
- | * **compareTo() debe ser reciproco**. Se debe cumplir: '' | ||
- | * Si el método '' | ||
- | * Si el objeto que se recibe por parámetro es null debe lanzar una excepción de tipo '' | ||
- | * Si el objeto que se recibe como parámetro no permite ser comparado debe lanzar una excepción de tipo ClassCastException (No existe un criterio común; no es de la misma clase) | ||
- | | ||
- | |||
- | ---- | ||
- | (c) {{date> %Y}} Fernando Valdeón |
bloque4/comparable.1520850788.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)