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:57] – 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. | ||
bloque4/comparable.1508277448.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)
