Está en la página 1de 14

29/07/2010

Colecciones en Java

Curso: Tecnología de la Programación II.


Docente: Mg. Zoraida Vidal Melgarejo,.

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.

1
29/07/2010

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.

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.

2
29/07/2010

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.

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.

3
29/07/2010

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.

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.

4
29/07/2010

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.

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

5
29/07/2010

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

6
29/07/2010

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

7
29/07/2010

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

8
29/07/2010

ALGORITMOS: EL ALGORITMO SORT Y


SHUFFLE.

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 REVERSE,


COPY, MAX Y MIN.

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 List de destino y un objeto List de
origen. Cada elemento del objeto List de origen se copia al
objeto List de destino.

18

9
29/07/2010

ALGORITMOS: EL ALGORITMO REVERSE,


COPY, MAX Y MIN.

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

10
29/07/2010

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

11
29/07/2010

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

12
29/07/2010

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

13
29/07/2010

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

14

También podría gustarte