Herramientas de usuario

Herramientas del sitio


bloque4:comparable

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:comparable [17/10/2017 21:58] Fernando Valdeónbloque4: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, etc.) 
  
-==== 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()**, el cual hemos usado en ocasiones anteriores. 
- 
-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<Coche>{ 
-   … 
-   public int compareTo(Coche o){ 
-      … 
-   } 
-} 
-</code> 
-Así indicamos que vamos a implementar la interface Comparable en la clase Coche, para el parámetro de tipo Coche. 
- 
-A continuación, debemos plantearnos cómo queremos que un coche sea mayor que otro dentro de un orden natural. Normalmente esta ordenación atenderá al valor de alguno de sus atributos. 
-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> 
-//Atendiendo a su numero de km 
-public int compareTo(Coche otro){ 
- return this.km – otro.km; //Resto los km y tendré 0, >0 ó <0 
-} 
-</code> 
- 
-<code java> 
-//Atendiendo a su fecha de matriculación 
-public int compareTo(Coche otro){ 
- return fechaMatriculacion.compareTo(otro.fechaMatriculacion); 
- // Devuelvo lo que devuelve el método compareTo() de LocalDate 
-} 
-</code> 
- 
-<code java> 
-//Atendiendo a su matricula 
-public int compareTo(Coche otro){ 
- return matricula.compareTo(otro.matricula); 
- // Devuelvo lo que devuelve el método compareTo() de String 
-} 
-</code> 
- 
-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(), se vió en el tema de Excepciones) 
-  * 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)