Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
29/07/2010 1 Colecciones en Java Curso: Tecnología de la Programación II. Docente: Mg. Zoraida Vidal Melgarejo,. 1 ALMACENAMIENTO DE OBJETOS. Java dispone de varias formas para almacenar objetos (o más bien, referencias a objetos). La biblioteca java.util tiene un conjunto razonablemente completo de clases contenedoras que contienen estructuras de datos, interfaces y algoritmos preempaquetados para manipular esas estructuras de datos. Sus principales tipos básicos son: List, Set, Queue y Map (lista, conjunto, cola y mapa respectivamente). Estos tipos de objetos también se conocen con el nombre de clases de colección o contenedores. 2 29/07/2010 2 ALMACENAMIENTO DE OBJETOS. Los contenedores o colecciones proporcionan formas sofisticadas de almacenar los objetos, incrementando de manera significativa nuestra potencia de programación. Con las colecciones, los programadores utilizan las estructuras de datos existentes sin tener que preocuparse por la manera en que éstas se implementan, constituyéndose en un claro ejemplo de reutilización de código. Los programadores pueden codificar más rápido y esperar un excelente rendimiento, maximizando la velocidad de ejecución y minimizando el consumo de memoria. 3 COLECCIONES. Una colección es una estructura de datos (en realidad, un objeto) que puede guardar referencias a otros objetos. Las interfaces de las colecciones declaran las operaciones que un programa puede realizar en cada tipo de colección. Las implementaciones de las colecciones se crean cuidadosamente para obtener una ejecución rápida y un uso eficiente de la memoria; además fomentan la reutilización de software al proporcionar una funcionalidad conveniente. 4 29/07/2010 3 LA CLASE ARRAYS. La clase Arrays proporciona métodos estáticos para manipular arreglos, como sort para ordenar un arreglo, binarySearch para buscar en un arreglo ordenado, equals para comparar arreglos y fill para colocar valores en un arreglo. Estos métodos se sobrecargan para los arreglos de tipo primitivo y los arreglos tipo Object. 5 LA INTERFAZ COLLECTION Y LA CLASE COLLECTIONS. La interfaz Collection es la interfaz raíz en la jerarquía de colecciones, a partir de la cual se derivan las interfaces Set (una colección que no contiene duplicados) y List. La interfaz Collection contiene operaciones masivas, es decir operaciones que se llevan a cabo en toda la colección, para agregar, borrar, comparar y retener objetos (elementos) en la colección. Un objeto Collection también puede convertirse en un arreglo. 6 29/07/2010 4 LA INTERFAZ COLLECTION Y LA CLASE COLLECTIONS. La interfaz Collection proporciona un método que devuelve un objeto Iterator, el cual permite recorrer la colección así como eliminar elementos de dicha colección. Otros métodos de la interfaz Collection permiten a un programa determinar el tamaño de una colección, y si está vacía o no. Collection se utiliza comúnmente con un tipo de parámetro de métodos para permitir el procesamiento polimórfico de todos los objetos que implementen a la interfaz Collection. 7 LA INTERFAZ COLLECTION Y LA CLASE COLLECTIONS. La mayoría de las implementaciones de colecciones proporcionan un constructor que toma un argumento Collection permitiendo así que un tipo de colección sea tratado como otro tipo de colección. La clase Collections proporciona métodos static que manipulan las colecciones mediante el polimorfismo. Estos métodos implementan algoritmos para buscar, ordenar, etc. Otros métodos de Collections incluyen métodos de envoltura que devuelven nuevas colecciones. 8 29/07/2010 5 OBJETOS LIST. Un objeto List es un objeto Collection ordenado que puede contener elementos duplicados. Al igual que los índices de arreglos, los índices de objetos List empiezan desde cero (es decir, el índice del primer elemento es cero). Además de los métodos de interfaz heredados de Collection, List proporciona métodos para manipular elementos a través de sus índices, para manipular un rango especificado de elementos, buscando elementos y para obtener un objeto ListIterator para acceder a los elementos. 9 OBJETOS LIST. La interfaz List es implementada por varias clases, incluyendo a ArrayList, LinkedList y Vector. La clase ArrayList es una implementación de un objeto List como arreglo que puede modificar su tamaño dinámicamente. El comportamiento y las herramientas de la clase ArrayList son similares a las de la clase Vector. Un objeto LinkedList es una implementación de un objeto List como lista enlazada. 10 29/07/2010 6 OBJETOS LIST. Los objetos ArrayList se comportan igual que los objetos Vector desincronizados, y por lo tanto se ejecutan con más rapidez que los objetos Vector, ya que los objetos ArrayList no tienen la sobrecarga que implica la sincronización de sus procesos. Los objetos LinkedList se pueden utilizar para crear pilas, colas, árboles y colas con dos partes finales (conocidas en inglés como “deque”). 11 OBJETOS LIST - USOS. // Declarar e implementar un ArrayList private ArrayList datos = new ArrayList(); // Agregar un elemento al ArrayList datos.add(txtNombre.getText()); // Conocer el tamaño del ArrayList if(datos.size() > 0) { … } // Convertir un ArrayList en un arreglo datos.toArray() 12 29/07/2010 7 OBJETOS LIST - USOS. // Ordenar de forma ascendente el ArrayList Collections.sort(datos); // Buscar un elemento en el ArrayList Collections.binarySearch(datos, datoBuscado); // Invertir el orden de un ArrayList Collections.reverse(datos); 13 OBJETOS LIST - USOS. // Obtener el iterador del ArrayList Iterator iterador = datos.iterator(); // Recorrer el ArrayList haciendo uso del iterador while(iterador.hasNext()) { … } // Obtener un elemento del ArrayList haciendo uso del iterador iterador.next() // Eliminar un elemento del ArrayList haciendo uso del iterador iterador.remove(); 14 29/07/2010 8 ALGORITMOS. El marco de trabajo de colecciones proporciona varios algoritmos de alto rendimiento para manipular elementos de colecciones. Estos algoritmos se implementan como métodos estáticos de la clase Collections. Los algoritmos sort, binarySearch, reverse, shuffle, fill y copy operan en objetos List. Los algoritmos min y max operan en objetos Collection. El algoritmo reverse invierte los elementos de un objeto List; fill establece cada elemento de un objeto List para que haga referencia a un objeto Object especificado; y copy copia las referencias de un objeto List a otro. 15 ALGORITMOS: EL ALGORITMO SORT Y SHUFFLE. El algoritmo sort ordena los elementos de un objeto List. El orden se determina en base al orden natural del tipo de los elementos, según su implementación mediante el método compareTo de ese objeto. El método compareTo está declarado en la interfaz Comparable y algunas veces se le conoce como el método de comparación natural. La llamada a sort puede especificar un segundo argumento tipo objeto Comparator, para determinar un ordenamiento alterno de los elementos. 16 29/07/2010 9 El método reverseOrder de Collections devuelve un objeto Comparator, el cual representa el orden inverso de la colección. Para ordenar una vista List de un arreglo String, el orden inverso es una comparación lexicográfica (el comparador compara los valores Unicode que representan a cada elemento) en orden descendente. Es posible crear un objeto Comparator personalizado si se define una clase que implemente a la interfaz Comparator. El algoritmo shuffle ordena al azar los elementos de un objeto List. 17 ALGORITMOS: EL ALGORITMO SORT Y SHUFFLE. ALGORITMOS: EL ALGORITMO REVERSE, COPY,MAX YMIN. La clase Collections proporciona algoritmos para invertir, llenar y copiar objetos List. El algoritmo reverse invierte el orden de los elementos en un objeto List y el algoritmo fill sobreescribe los elementos en un objeto List con un valor especificado. El algoritmo copy toma dos argumentos: un objeto Listde destino y un objeto List de origen. Cada elemento del objeto List de origen se copia al objeto List de destino. 18 29/07/2010 10 ALGORITMOS: EL ALGORITMO REVERSE, COPY,MAX YMIN. El objeto List de destino debe tener cuando menos la misma longitud que el objeto List de origen; de lo contrario, se producirá una excepción IndexOutOfBoundsException. Si el objeto List de destino es más largo, los elementos que no se sobreescriban permanecerán sin cambio. Los algoritmos max y min operan en cualquier objeto Collection. El algoritmo min devuelve el elemento más pequeño en un objeto Collection, y el algoritmo max devuelve el elemento más grande en un objeto Collection. 19 ALGORITMOS: EL ALGORITMO BINARYSEARCH. El algoritmo binarySearch se incluye en el marco de trabajo de colecciones como un método estático de la clase Collections, que implementa la búsqueda binaria y, localiza un objeto Object en un objeto List. Si se encuentra el objeto Object se devuelve el índice de ese objeto. Si no se encuentra el objeto Object, binarySearch devuelve un valor negativo. Antes de realizar búsquedas con el método de búsqueda binaria, los elementos de la lista deben estar ordenados en forma ascendente. 20 29/07/2010 11 CONJUNTOS. Un objeto Set es un objeto Collection que contiene elementos únicos, es decir sin elementos duplicados. El marco de trabajo de colecciones contiene varias implementaciones de Set, incluyendo a HashSet y TreeSet. HashSet almacena sus elementos en una tabla de hash, y TreeSet almacena sus elementos en un árbol. El marco de trabajo de colecciones también incluye la interfaz SortedSed (que extiende a Set) para los conjuntos que mantengan a sus elementos ordenados, ya sea en el orden natural o el especificado por un objeto Comparator. 21 CONJUNTOS. La clase TreeSet implementa a SortedSet. El método headSet de TreeSet permite obtener un subconjunto del objeto TreeSet, en el que todos los elementos serán menores que un valor especificado. El método tailSet de TreeSet permite obtener un subconjunto en el que cada elemento sea mayor o igual que un valor especificado. Cualquier cambio en estos subconjuntos se reflejará en el objeto TreeSet original. 22 29/07/2010 12 CONJUNTOS - USOS. // Declarar e implementar un conjunto sin elementos repetidos Set sinRepetidos = new HashSet(datos); // Declarar e implementar un conjunto de elementos ordenados SortedSet ordenado = new TreeSet(datos); // Obtener un subconjunto de valores menores que un valor dado ordenado.headSet(dato) // Obtener un subconjunto de valores mayores o iguales que un valor dado ordenado.tailSet(dato) 23 CONJUNTOS - USOS. // Obtener el iterador del conjunto Iterator iterador = ordenado.iterator(); // Recorrer el conjunto haciendo uso del iterador while(iterador.hasNext()) { … } // Obtener un elemento del conjunto haciendo uso del iterador iterador.next() 24 29/07/2010 13 MAPAS. Los objetos Map asocian claves a valores y no pueden contener claves duplicados, es decir cada clave puede asociarse solamente con un valor; a este tipo de asociación se le conoce como asociación de uno a uno. Los objetos Map difieren de los objetos Set en cuanto a que los primeros contienen claves y valores, mientras que los segundos contienen solamente valores. Dos de las muchas clases que implementan a la interfaz Map son HashMap y TreeMap. 25 MAPAS. Los objetos HashMap almacenan elementos en tablas de hash, y los objetos TreeMap almacenan elementos en árboles. La interfaz SortedMap extiende a Map y mantiene sus claves en orden; ya sea el orden natural o el orden especificado por un objeto Comparator. La clase TreeMap implementa a SortedMap. La clase HashMap permite el uso de una clave null y de valores null. 26 29/07/2010 14 MAPAS - USOS. // Declarar e implementar un mapa private Map mapa = new HashMap(); // Agregar un elemento al mapa mapa.put(clave, valor); // Obtener un elemento del mapa mapa.get(clave) // Determinar si un elemento se encuentra en el mapa mapa.containsKey(clave) 27 MAPAS - USOS. // Obtener el iterador del mapa (se obtiene el conjunto de claves) Iterator claves = mapa.keySet().iterator(); // Recorrer el mapa haciendo uso del iterador while(claves.hasNext()) { … } // Obtener un elemento del mapa haciendo uso del iterador claves.next() 28
Compartir