{"id":2201,"date":"2018-02-13T22:01:43","date_gmt":"2018-02-14T03:01:43","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=2201"},"modified":"2018-02-16T00:14:37","modified_gmt":"2018-02-16T05:14:37","slug":"arrays-y-collections","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=2201","title":{"rendered":"Arrays y Collections"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-2205\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/02\/java30.png\" alt=\"\" width=\"266\" height=\"114\" \/><\/p>\n<p><span style=\"color: #000000;\">La clase Arrays agrupa algoritmos \u00fatiles que se aplican, en general, a arreglos de los tipos primitivos. Collections tambi\u00e9n es una clase de utilidades, de m\u00e9todos static que implementan algoritmos aplicados a todo tipo de colecciones.\u00a0<!--more--><\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Clase Arrays<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Java 2 incorpora la clase Arrays para disponer de m\u00e9todos que trabajen con arreglos de cualquier tipo. Estos m\u00e9todos implementan algoritmos de b\u00fasqueda, ordenaci\u00f3n y de asignaci\u00f3n de un valor al array completo. Todos los m\u00e9todos son static (m\u00e9todos de clase). No se pueden crear objetos de la clase Arrays, el constructor que tiene es privado.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Ordenaci\u00f3n de arrays<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">El m\u00e9todo de ordenaci\u00f3n, sort(), est\u00e1 sobrecargado, de tal forma que se puede ordenar un array de cualquier tipo primitivo y, en general, de tipo Object.sort() implementa el algoritmo de ordenaci\u00f3n quicksort que asegura una eficiencia n log n.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0double []w = {12.4, 5.6, 3.5, -2.0, 6.0, -4.5, 22.0};<br \/>\n<\/span>\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #000000;\">\/\/ Llamada a sort() para ordenar w<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Arrays.sort(w);<\/span><\/p>\n<p><span style=\"color: #000000;\">A continuaci\u00f3n se muestran algunos de los m\u00e9todos de ordenaci\u00f3n:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0public static void sort(double []w);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void sort(int []w);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void sort(long []w);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void sort(Object []w);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void sort(Object []w, Comparator cmp);<\/span><\/p>\n<p><span style=\"color: #000000;\">Se pueden ordenar un subarray, para ello se especifica el \u00edndice inicio (inclusive) y final (exclusive):<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0 \/\/ ordena los elementos w[inicio] . . w[final-1]<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void sort(double []w, int inicio, int final);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void sort(int []w, int inicio, int final);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0. . .<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Norma<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Para ordenar un arreglo de objetos los elementos deben implementar la interfaz Comparable ya que el criterio de ordenaci\u00f3n est\u00e1 determinado por el m\u00e9todo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 int compareTo(Object x);<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Declarar la clase Racional para representar un n\u00famero racional (numerador, denominador) y llenar un array de objetos de esa clase. A continuaci\u00f3n, ordenar de forma creciente el arreglo de n\u00fameros racionales.<\/span><\/p>\n<p><span style=\"color: #000000;\">La clase Racional tiene dos atributos de tipo int: numerador y denominador. Implementa la interfaz Comparable para poder realizar la ordenaci\u00f3n con el m\u00e9todo Arrays.sort(). Por ello es necesario definir el m\u00e9todo int compareTo() de tal forma que devuelva -1, 0, 1 si el n\u00famero racional primer operando (this) es menor, igual o mayor, respectivamente que el n\u00famero racional pasado como argumento.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 import java.util.*;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public class Racional implements Comparable {<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0private int numerador, denominador;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0public Racional(int n, int d) throws Exception{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 numerador = n;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 denominador = d;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if(denominador == 0) throw new Exception(\u00abDenominador 0\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0public String toString(){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return numerador + \u00ab\/\u00bb + denominador;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0@Override<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0public int compareTo(Object x) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ m\u00e9todo de interfaz<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Racional r;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 r = (Racional) x;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if(valorReal()&lt;r.valorReal())<\/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 return -1;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else if(valorReal()&gt;r.valorReal())<\/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 return 1;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \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 return 0;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0private double valorReal(){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return (double)numerador\/(double)denominador;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \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 \u00a0\u00a0import java.util.*;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ clase principal, crea los objetos de manera aleatoria,<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ se escriben en pantalla, a continuaci\u00f3n se ordena, y por<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ \u00faltimo se vuelve escribir.<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public class Ejemplo {<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0static int MR=7;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void main(String[] args) {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Racional []ar = new Racional[MR];<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try{<\/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 \/\/ numerador y denominador se genera aleatoriamente<\/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 for(int i=0;i&lt;MR;i++){<\/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 \u00a0 \u00a0 \u00a0 \u00a0int n, d;<\/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 \u00a0 \u00a0 \u00a0 \u00a0n = (int)(Math.random()*21+1);<\/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 \u00a0 \u00a0 \u00a0 \u00a0d = (int)(Math.random()*21+1);<\/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 \u00a0 \u00a0 \u00a0 \u00a0ar[i] = new Racional(n,d);<\/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 }<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }catch(Exception e){;}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ listado de los objetos creados<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abLista de numeros racionales: \u00ab);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 escribe(ar);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ ordenaci\u00f3n del array<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Arrays.sort(ar);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ listado de los objetos ordenados<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abLista ordenada de n\u00fameros racionales: \u00ab);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 escribe(ar);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0static void escribe(Racional []r){<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0for(int i=0;i&lt;r.length;i++)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(r[i] + \u00ab\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 }<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>B\u00fasqueda de una clave<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">La operaci\u00f3n de b\u00fasqueda se realiza sobre un arreglo ordenado. La clase Arrays dispone del m\u00e9todo\u00a0<strong>static int bineraySearch()\u00a0<\/strong>para realizar la b\u00fasqueda de un elemento en un arreglo. El m\u00e9todo devuelve la posici\u00f3n del elemento en el array, o bien, si no est\u00e1, -p, en el que p es la posici\u00f3n de inserci\u00f3n del elemento en el arreglo. El algoritmo que utiliza el m\u00e9todo es el de b\u00fasqueda binaria que asegura una eficiencia de log n. El m\u00e9todo est\u00e1 sobrecargado para cada tipo de dato primitivo, y para arrays de cualquier objeto (Object) que implemente la interfaz Comparable.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 int []w = {14, -5, 3, 2, 6, -4, 22, 4};<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ llamada a sort() para ordenar w<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Arrays.sort(w);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ b\u00fasqueda de un elemento<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 int k;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 k = Arrays.binarySearch(w,4);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 if(k&gt;=0)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(\u00abPosici\u00f3n de \u00bb + 4 + \u00bb en la lista: \u00bb + k);<\/span><\/p>\n<p><span style=\"color: #000000;\">A continuaci\u00f3n se escribe la declaraci\u00f3n de alguno de estos m\u00e9todos:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0public static int binarySearch(double []w, double clave);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static int binarySearch(int []w, int clave);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static int binarySearch(Object []w, Object clave);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static int binarySearch(Object []w, Object clave, Comparator c);<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Asignaci\u00f3n de un elemento<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Otra utilidad de la clase Arrays es el m\u00e9todo fill() para asignar un elemento a todas las posiciones de un array, o bien a un rango del arreglo. El m\u00e9todo est\u00e1 sobrecargado, habiendo una declaraci\u00f3n para cada tipo de dato primitivo y para Object. A continuaci\u00f3n se escribe la declaraci\u00f3n de fill() para algunos tipos:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void fill(int []w, int inicio, int final, int val);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void fill(Object []w, Object val);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 . . .<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Definir un arreglo de enteros, inicializar la primera mitad a-1 y la segunda mitad a+1. Adem\u00e1s, inicializar un arreglo de caracteres a la letra \u00aba\u00bb y un arreglo de cadenas a \u00abPaloma\u00bb. Se definen arreglos de los tipos pedidos y de tama\u00f1o constante. Para inicializar la primera mitad del array a[] hay que especificar el \u00edndice inicio = 0 y final\u00a0 = a.length\/2; la otra mitad tiene como inicio el anterior final.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 static final int N=10;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 int []iv = new int[N];<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 char[] cv = new char[N];<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 String []sv = new String[N];<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ llenado de los arrays<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Arrays.fill(iv,0,iv.length\/2,-1);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Arrays.fill(iv,iv.length\/2,-1);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Arrays.fill(cv,&#8217;a&#8217;);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Arrays.fill(sv,\u00bbPaloma\u00bb);<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Clase Collections<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Esta clase se encuentra en el paquete java.util; est\u00e1 dise\u00f1ada para trabajar con colecciones:\u00a0<strong>List, Map, Set,\u00a0<\/strong>en general sobre cualquier Collection. Agrupa m\u00e9todos static que implementan algoritmos gen\u00e9ricos de ordenaci\u00f3n, b\u00fasqueda, m\u00e1ximo y m\u00ednimo. Adem\u00e1s, dispone de m\u00e9todos para dotar de la cualidad de sincronizaci\u00f3n a una colecci\u00f3n, y para convertir una colecci\u00f3n a \u00absolo lectura\u00bb.<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Ordenaci\u00f3n y b\u00fasqueda<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Los m\u00e9todos de ordenaci\u00f3n se aplican a una lista cuyos elementos implementan la interfaz Comparable y que se puedan comparar mutuamente. Tambi\u00e9n, hay una sobrecarga de estos m\u00e9todos para realizar la comparaci\u00f3n con la interfaz Comparator.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0public static void sort(List lista);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static void sort(List lista, Comparator cmp);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static int binarySearch(List lista, Object clave);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static int binarySearch(List lista, Object cl, Comparator cmp);<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>M\u00e1ximo y m\u00ednimo<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Los m\u00e9todos max() y min() devuelven el m\u00e1ximo y m\u00ednimo, respectivamente, de una colecci\u00f3n. Para que se pueda realizar la operaci\u00f3n, todos los elementos deben implementar la interfaz Comparable y ser mutuamente comparables. Es decir, si por ejemplo una colecci\u00f3n guarda n\u00fameros complejos y cadenas, dif\u00edcilmente se podr\u00e1 obtener el m\u00e1ximo (adem\u00e1s de ser absurdo). Los m\u00e9todos son los siguientes:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Object max(Collection c);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Object min(Collection c);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ sobrecarga que obtiene el m\u00e1ximo o m\u00ednimo respecto a un comparador<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Object max(Collection c, Comparator cmp);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Object min(Collection c, Comparator cmp);<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Sincronizaci\u00f3n<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Para a\u00f1adir la cualidad de sincronizaci\u00f3n a las colecciones, Collections dispone de m\u00e9todos que se aplican a cada tipo de colecci\u00f3n:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0public static Map synchronizedMap(Map mapa);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Set synchronizedSet(Set cn);<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Conversi\u00f3n a solo lectura<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">Estos m\u00e9todos convierten la colecci\u00f3n al modo solo lectura, de tal forma que la operaci\u00f3n de a\u00f1adir (add) o eliminar (remove) un elemento levanta la excepci\u00f3n <strong>UnsupportedOperationException<\/strong>. Algunos de los m\u00e9todos son los siguientes:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static List unmodifiableList(List lista);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Set unmodifiableSet(Set conjunto);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 public static Collection unmodifiable Collection(Collection c);<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">A continuaci\u00f3n se escribe un ejemplo, en el que se crea un Set y despu\u00e9s se convierte a modo solo lectura.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 Set cn = new HashSet();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 cn.add(\u00abMarta\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ crea una visi\u00f3n de cn no modificable, de solo lectura<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 cn = Collections.unmodifiableSet(cn);<\/span><\/p>\n<h2><span style=\"color: #000000;\"><strong>Utilidades<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">La clase Collections dispone de m\u00e9todos \u00fatiles para ciertos procesos algor\u00edtmicos. El m\u00e9todo nCopies() crea una lista con n copias de un elemento; el m\u00e9todo copy() crea una lista copia de otra; fill() llena todos los elementos de una lista con un objeto.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0 public static List nCopies(int n, Object ob);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void copy(List destino, List fuente);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void fill(List lista, Object ob);<\/span><\/p>\n<p><span style=\"color: #000000;\">El m\u00e9todo reverse() invierte la posici\u00f3n de los elementos de una lista. Si la lista est\u00e1 en orden creciente, la llamada Collections.reverse(lista) deja a la lista en orden decreciente.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void reverse(List lista);<\/span><\/p>\n<p><span style=\"color: #000000;\">Tambi\u00e9n incluye el m\u00e9todo shuffle() para reordenar aleatoriamente los elementos de una lista.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void shuffle(List lista);<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Se realizan diversas operaciones utilizando m\u00e9todos de la clase Collections: crear una lista a partir de la copia n veces de una cadena, ordenar una lista de objetos Integer, buscar el m\u00e1ximo, etc\u00e9tera. Se escribe el m\u00e9todo main() con las operaciones nCopies(), sort(), max(), min() y reverse(). La declaraci\u00f3n de la lista de objetos especifica que el tipo de los elementos es Integer. De esa forma el compilador realiza comprobaciones de tipo. Tambi\u00e9n se puede realizar de forma gen\u00e9rica: List lista = new ArrayList(); de tal forma que se podr\u00eda a\u00f1adir cualquier tipo de objeto.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0public static void main(String[] args) {<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 int n=11;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 List lista1;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ Crea una lista formada por n copias de \u00abMarga\u00bb<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 lista1 = Collections.nCopies(n, \u00abMarga\u00bb);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(lista1);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ Crea una lista de objetos Integer, se ordena y se invierte<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 List&lt;Integer&gt; lista2 = new ArrayList&lt;Integer&gt;();<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for(int i=1;i&lt;=n;i++)<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0lista2.add(new Integer((int)(Math.random()*100+1)));<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(lista2);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u00abM\u00e1ximo: \u00bb + Collections.max(lista2)<\/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 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0+ \u00bb \\t M\u00ednimo: \u00bb + Collections.min(lista2));<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Collections.sort(lista2);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(lista2);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Collections.reverse(lista2);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(lista2);<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La clase Arrays agrupa algoritmos \u00fatiles que se aplican, en general, a arreglos de los tipos primitivos. Collections tambi\u00e9n es una clase de utilidades, de m\u00e9todos static que implementan algoritmos aplicados a todo tipo de colecciones.\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=2201\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":2205,"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\/2201"}],"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=2201"}],"version-history":[{"count":28,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2201\/revisions"}],"predecessor-version":[{"id":2232,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/2201\/revisions\/2232"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/2205"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}