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 [17/10/2017 21:58] – Fernando Valdeón | bloque4:comparable [04/09/2018 08:06] (actual) – borrado Fernando Valdeón | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ===== Herencia: Interface Comparable ===== | ||
- | 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 el cuerpo de sus métodos, de cara a poder ser ordenados. Esta interface solo tiene un método: **compareTo()**, | ||
- | |||
- | 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. | ||
- | Arrays.sort() recibe un Array y lo ordena. | ||
- | Collections.sort() recibe un elemento de tipo Collections y lo ordena (ArrayList, LinkedList, HashTable, etc). | ||
- | |||
- | === Método compareTo() === | ||
- | El método compareTo() devuelve se usa para saber si un objeto tiene un orden natural mayor o menor que el objeto actual (desde el que se llama al método). De vuelve 0 en caso de que ambos objetos tengan el mismo orden, un número entero negativo si el objeto actual es menor al objeto pasado como parámetro o un número positivo en caso contrario. | ||
- | |||
- | 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 Comparable en la clase Coche, para el parámetro de tipo Coche. | ||
- | |||
- | 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. | ||
- | |||
- | 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 | ||
- | } | ||
- | </ | ||
- | |||
- | Además, tal y como se comenta en la API sobre la interface Comparable se debe atender a una serie de reglas: | ||
- | * Si el valor que devuelve a.compareTo(b) es x, el valor que devuelve b.compareTo(a) será -x. CompareTo() debe ser reciproco. | ||
- | * Si el objeto que se recibe por parámetro es null debe lanzar una excepción de tipo NullPointerException. (throw new NullPointerException(), | ||
- | * Si el objeto que se recibe como parámetro no permite ser comparado debe lanzar una excepción de tipo ClassCastException. | ||
- | * Si el método equals() de la clase que implementa la interface devuelve true, compareTo() debe devolver 0. | ||
- | |||
- | ---- | ||
- | |||
- | (c) 2017 Fernando Valdeón |
bloque4/comparable.1508277506.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)