{"id":675,"date":"2024-02-27T20:35:02","date_gmt":"2024-02-27T20:35:02","guid":{"rendered":"https:\/\/javigomez.org\/?p=675"},"modified":"2025-09-29T20:33:34","modified_gmt":"2025-09-29T20:33:34","slug":"u10-06-clases-en-java-comparator","status":"publish","type":"post","link":"https:\/\/javigomez.org\/index.php\/2024\/02\/27\/u10-06-clases-en-java-comparator\/","title":{"rendered":"U10-06-Clases en Java \u2013 Comparator"},"content":{"rendered":"\n<p>La interfaz <code class=\"\">Comparator<\/code> en Java es una herramienta potente que permite <strong>comparar objetos de cualquier tipo<\/strong>, a diferencia de la interfaz <code class=\"\">Comparable<\/code> que solo compara objetos del mismo tipo. Proporciona un mecanismo flexible para definir criterios de comparaci\u00f3n personalizados para diferentes tipos de objetos.<\/p>\n\n\n\n<p><strong>Prop\u00f3sito:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define un&nbsp;<strong>m\u00e9todo \u00fanico<\/strong>&nbsp;llamado&nbsp;<code class=\"\">compare<\/code>&nbsp;para comparar dos objetos de&nbsp;<strong>cualquier tipo<\/strong>.<\/li>\n\n\n\n<li>Proporciona un mecanismo para&nbsp;<strong>ordenar objetos<\/strong>&nbsp;utilizando m\u00e9todos como&nbsp;<code class=\"\">Collections.sort<\/code>&nbsp;y&nbsp;<code class=\"\">Arrays.sort<\/code>&nbsp;con un criterio de comparaci\u00f3n personalizado.<\/li>\n\n\n\n<li>Permite usar objetos como&nbsp;<strong>llaves en Mapas ordenados<\/strong>&nbsp;y&nbsp;<strong>elementos en Conjuntos ordenados<\/strong>&nbsp;basados en un criterio espec\u00edfico.<\/li>\n<\/ul>\n\n\n\n<p><strong>M\u00e9todo <code>compare<\/code>:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es un&nbsp;<strong>m\u00e9todo abstracto<\/strong>&nbsp;(sin implementaci\u00f3n en la propia interfaz).<\/li>\n\n\n\n<li>Recibe dos objetos como argumentos.<\/li>\n\n\n\n<li>Devuelve un entero con el siguiente significado:\n<ul class=\"wp-block-list\">\n<li><strong>0:<\/strong>&nbsp;Los objetos son iguales.<\/li>\n\n\n\n<li><strong>Valor negativo:<\/strong>&nbsp;El primer objeto es menor que el segundo objeto.<\/li>\n\n\n\n<li><strong>Valor positivo:<\/strong>&nbsp;El primer objeto es mayor que el segundo objeto.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>package U2;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Comparator;\n\npublic class E00_00 {\n\n\tpublic static void main(String&#91;] args) {\n\t\t\n\t\tint&#91;] numeros = new int&#91;3];\n\t\tnumeros&#91;0]=3; numeros&#91;1]=1; numeros&#91;2]=2;\n\t\tSystem.out.println(Arrays.toString(numeros));\n\t\tArrays.sort(numeros);\n\t\tSystem.out.println(Arrays.toString(numeros));\n\t\t\n\t\tPersona p0=new Persona (0,\"Carlos\");\n\t\tPersona p1=new Persona (5,\"Lara\");\n\t\tPersona p2=new Persona (2,\"Maria\");\n\t\t\n\t\tArrayList&lt;Persona> personas = new ArrayList&lt;Persona>();\n\t\tpersonas.add(p2); personas.add(p1); personas.add(p0);\n\t\t\n\n\t\tSystem.out.println(personas);\n\t\tpersonas.sort(null);\n\t\tSystem.out.println(personas);\n\t\tpersonas.sort(new porId());\n\t\tSystem.out.println(personas);\n\t\tpersonas.sort(new porIdInv());\n\t\tSystem.out.println(personas);\n\t\t\n\t\tSystem.out.println(\"***********************\");\n\t\tPersona&#91;] aPersonas = new Persona&#91;3];\n\t\taPersonas&#91;0]=p1;\taPersonas&#91;1]=p2;\taPersonas&#91;2]=p0;\n\t\tSystem.out.println(Arrays.toString(aPersonas));\n\t\tArrays.sort(aPersonas);\n\t\tSystem.out.println(Arrays.toString(aPersonas));\n\t\tArrays.sort(aPersonas,new porId());\n\t\tSystem.out.println(Arrays.toString(aPersonas));\n\t\t\n\t\t\n\t}\n}\n\nclass porId implements Comparator{\n\t@Override\n\tpublic int compare(Object o1, Object o2) {\n\t\treturn  ((Persona) o1).id - ((Persona) o2).id; \n\t}\n}\n\nclass porIdInv implements Comparator{\n\t@Override\n\tpublic int compare(Object o1, Object o2) {\n\t\treturn  ((Persona) o2).id - ((Persona) o1).id; \n\t}\n}\n\n\nclass Persona implements Comparable{\n\tint id;\n\tString nombre;\n\tPersona (int i,String n){\n\t\tthis.id=i;\n\t\tthis.nombre=n;\n\t}\n\tpublic String toString() {\n\t\treturn \"ID: \" + this.id + \" Nombre: \" + this.nombre;\n\t}\n\t@Override\n\tpublic int compareTo(Object o) {\n\t\tPersona p=(Persona) o;\n\t\treturn(this.nombre.compareTo(p.nombre));\n\t}\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Java U10 06 Clases Comparator\" width=\"1200\" height=\"900\" src=\"https:\/\/www.youtube.com\/embed\/aMTtf5ViT-k?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>La interfaz Comparator en Java es una herramienta potente que permite comparar objetos de cualquier tipo, a diferencia de la interfaz Comparable que solo compara &hellip; <\/p>\n","protected":false},"author":1,"featured_media":656,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[79,87,203,265],"class_list":["post-675","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","tag-clases","tag-comparator","tag-java","tag-poo"],"_links":{"self":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts\/675","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/comments?post=675"}],"version-history":[{"count":1,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts\/675\/revisions"}],"predecessor-version":[{"id":879,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/posts\/675\/revisions\/879"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/media\/656"}],"wp:attachment":[{"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/media?parent=675"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/categories?post=675"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/javigomez.org\/index.php\/wp-json\/wp\/v2\/tags?post=675"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}