{"id":2233,"date":"2018-02-16T00:15:59","date_gmt":"2018-02-16T05:15:59","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=2233"},"modified":"2018-02-18T18:24:27","modified_gmt":"2018-02-18T23:24:27","slug":"comparable-y-comparator","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=2233","title":{"rendered":"Comparable y Comparator"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-2249\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/02\/java32-300x119.jpeg\" alt=\"\" width=\"278\" height=\"110\" srcset=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/02\/java32-300x119.jpeg 300w, https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/02\/java32.jpeg 321w\" sizes=\"(max-width: 278px) 100vw, 278px\" \/><\/p>\n<p><span style=\"color: #000000;\">Numerosas operaciones con colecciones exigen que sus elementos sean comparables, es decir, que se pueda determinar que un elemento es menor, igual o mayor que otro. Esta propiedad se establece a nivel de clase, implementando la interfaz Comparable, o bien la interfaz Comparator.\u00a0<\/span><!--more--><\/p>\n<h2><span style=\"color: #000000;\"><strong>Comparable<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">La interfaz Comparable se utiliza para establecer un orden natural entre los objetos de una misma clase. La declaraci\u00f3n de la interfaz es la siguiente (paquete java.lang):<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public interface Comparable{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int compareTo(Object ob);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Si compareTo() devuelve un negativo significa que el objeto que llama al m\u00e9todo es menor que el pasado en el argumento; si devuelve o significa que son iguales, y si devuelve un positivo el objeto que llama al m\u00e9todo es mayor que el pasado en el argumento. La clase Racional del post de Arrays y Collections implementa la interfaz Comparable, el programador de la clase ha fijado la forma de comparar n\u00fameros racionales.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Nota<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Todas las clases que representan a tipos primitivos (wraper): Integer, Double, . . ., y la clase String implementan la interfaz Comparable. La implementaci\u00f3n de compareTo() en String distingue may\u00fasculas de min\u00fasculas.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Comparator<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Hay m\u00e9todos de ordenaci\u00f3n y b\u00fasqueda de objetos que utilizan la interfaz Comparator para determinar el orden natural entre dos elementos. Esta interfaz se encuentra en el paquete java.util. Su declaraci\u00f3n es la siguiente:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public interface Comparator{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public int compare(Object ob1, Object ob2);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 public boolean equals(Object ob);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">El m\u00e9todo compare() relaciona dos objetos, no necesariamente del mismo tipo. Devolver\u00e1 un negativo si el objeto ob1 es menor que el segundo objeto, cero si son iguales y positivo si ob1 es mayor que ob2. El comportamiento de compare() tiene que ser compatible con el resultado del m\u00e9todo equals(), es decir, si este devuelve true, compare() tendr\u00e1 que devolver 0.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Cuadro{<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0int largo;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0int ancho;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0. . .<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Compara implements Comparator{<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0public int compare(){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Cuadro c1 = (Cuadro)ob1;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Cuadro c2 = (Cuadro)ob2;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if(c1.largo == c2.largo &amp;&amp; c1.ancho == c2.ancho)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return 0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ c1 es menor que c2 si, en superficie, c1 es menor<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0return (c1.largo*c1.ancho) &#8211; (c2.largo*c2.ancho);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Nota<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Los m\u00e9todos que utilizan un argumento de tipo Comparator se llaman pasando una referencia a la clase que implementa la interfaz Comparator. Por ejemplo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0class Alba implements Comparator{. . .}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0Collections.sort(lista, new Alba());<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Numerosas operaciones con colecciones exigen que sus elementos sean comparables, es decir, que se pueda determinar que un elemento es menor, igual o mayor que otro. Esta propiedad se establece a nivel de clase, implementando la interfaz Comparable, o bien la interfaz Comparator.\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=2233\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2249,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2233"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2233"}],"version-history":[{"count":12,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2233\/revisions"}],"predecessor-version":[{"id":2304,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2233\/revisions\/2304"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/2249"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}