Comparator vs Comparable en Java

17 septiembre, 2010 por Ana Buigues 23 comentarios »

Diferencia entre Comparable y Comparator

La diferencia principal entre Comparable y Comparator es que Comparable es utilizado para implementar el orden natural, sin necesidad de especificar un Comparator, por ejemplo, los String son comparados alfabéticamente. Usamos Comparator cuando queramos crear otro tipo de orden que no sea el natural.

El contrato que implica implementar Comparable requiere de un parámetro extra, el objeto con el que comparar compareTo(obj1) de forma que la comparación se realizará del objeto en si (this) con el objeto pasado como parámetro. Comparator, sin embargo obliga a implementar el método compare (obj1, obj2) de forma que los dos objetos a comparar son pasados como parámetros y el objeto que implementa el método compare simplemente sirve de apoyo a la comparación.

» Leer más: Comparator vs Comparable en Java

La mala educación

10 septiembre, 2010 por Ana Buigues 9 comentarios »

El otro día estaba desayunando en un bar cercano a mi trabajo cuando la dueña empezó contarme lo caro que le había salido la vuelta al cole. La mujer me comentaba que los libros de texto para sus dos hijos le habían costado sobre los 700€, además de tener que comprar todo el material que el colegio les exigía, que si lápices de la punta tal, que si libretas con el cuadrado de tipo canario etc… por lo que no podía comprar cualquier tipo de libreta de 0’60€ Tampoco entendía porque a su hijo pequeño no le servían los libros del mayor y tenía que volver a comprarlos, con lo que le suponía más gasto cuando en realidad ya había pagado por unos libros similares para su hijo mayor.

» Leer más: La mala educación

Cómo sobreescribir los métodos equals y hashCode de Java

6 julio, 2010 por Ana Buigues 14 comentarios »

En la clase java.lang.Object (y por lo tanto, por herencia, en todas las demás clases) tenemos métodos que a veces olvidamos y que son importantes:

  • public boolean equals(Object o)
  • public int hashCode()

Estos métodos son especialmente importantes si vamos a guardar nuestros objetos en cualquier tipo de colección: listas, mapas… y más aun si los objetos que vamos a guardar en la colección son serializables.

Estos métodos tienen formas explicitas de cómo hay que implementarlos. Sobreescribir estos métodos puede parecer simple, pero en realidad hay muchas formas de hacerlo incorrectamente lo que nos puede llevar a muchos crebraderos de cabeza. Lo vemos a continuación.

» Leer más: Cómo sobreescribir los métodos equals y hashCode de Java