2sintIva

9
Programación Avanzada Orientada a Objetos Prof: José Antonio Cruz Zamora Alumno: Iván Uriel Martínez García UNIDAD II Cap. 19 - Colecciones Síntesis 09 / 03 / 2015

Transcript of 2sintIva

Page 1: 2sintIva

Programación Avanzada Orientada a Objetos

Prof: José Antonio Cruz Zamora

Alumno: Iván Uriel Martínez García

UNIDAD II

Cap. 19 - Colecciones

Síntesis

09 / 03 / 2015

Page 2: 2sintIva

Introducción:

En este capítulo trataremos el marco de colecciones de Java, las cuales sirven

para manejar la estructura de datos en un nivel más alto (no sólo crear y manipular

de manera laboriosa y dinámica cada elemento de las estructuras de datos),

además de que contiene interfaces y algoritmos pre empaquetados para manipular

esas estructuras.

Algunos ejemplos de colecciones son las tarjetas que contiene un mazo de cartas,

la música que esta almacenada en la computadora, los miembros de un equipo

deportivo, registros que se tienen, etc.

También se trataran los genéricos en el marco de colecciones de Java Con las

colecciones los programadores utilizan las estructuras de datos existentes sin

tener que preocuparse por la menar en que estas se implementan.

Con esto obtenemos un ejemplo muy bueno que es la reutilización de código,

además de que los programadores pueden codificar más rápido y esperar un

excelente rendimiento, maximizando la velocidad de ejecución y maximizando el

consumo de memoria. Las interfaces describen las capacidades de cada tipo de

colección, las clases de implementación, los algoritmos que procesan a las

colecciones y los denominados iteradores, junto con la sintaxis de la instrucción for

mejorada para recorrer las colecciones.

Este marco de Java proporciona componentes reutilizables, listos para utilizarse

(sin tener que escribir sus propias clases de colecciones, aunque se puede hacer)

que están estandarizados, de manera que las aplicaciones puedan compartirlas

fácilmente sin tener que preocuparse por los detalles relacionados con su

implementación. Este marco de colecciones también fomenta aún más la

reutilización. A medida que se desarrollen estructuras de datos y algoritmos que

se ejecuten a este marco de trabajo, una extensa base de programadores estará

ya familiarizada con las interfaces y algoritmos implementados por esas

estructuras de datos.

Conceptos.

Una colección es una estructura de datos (un objeto) que puede guardar

referencias a otros objetos. Por lo general, las colecciones contienen referencias a

objetos, los cuales son todos del mismo tipo. Las interfaces del marco de

trabajo de colecciones declaran las operaciones que se deben realizar en

forma genérica en varios tipos de colecciones.

Page 3: 2sintIva

Las clases y las interfaces del marco de trabajo de colecciones se encuentran en

el paquete “java.util”

La clase Arrays.

La clase Arrays proporciona métodos static para manipular arreglos,

incluyendo a sort para ordenar un arreglo, a binarySearch para buscar en un

arreglo ordenado, a equals para comparar arreglos y a fill para colocar elementos

en un arreglo. El método asList de Arrays devuelve una vista List de un arreglo, la

cual permite a un programa manipular el arreglo como si fuera un objeto List.

Cualquier modificación realizada a través de la lista List modifica el arreglo, y

cualquier modificación al arreglo modifica a la vista List. El método size obtiene el

número de elementos en un objeto List, y el método get devuelve un elemento del

objeto List.

La interfaz Collec 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 y List. La interfaz Collection contiene

operaciones masivas para agregar, borrar, comparar y retener objetos en una

colección. Tambien proporciona un método llamado iterator para obtener Iterator.

Listas.

Un objeto List es un objeto Collection, que puede contener elementos duplicados.

La interfaz List se implementa mediante las clases ArrayList, LlinkedList y Vector.

La clase ArrayList es una implementación de tipo arreglo de un objeto List,

que puede cambiar su tamaño. Un objeto LinkedList es una implementación tipo

lista enlazad en un objeto List.

El método hasNext de Iterator determina si un objeto Collection contiene otro

elemento. El método next devuelve una referencia al siguiente objeto en el objeto

Collections y avanza un objeto Iterator.

El método subList devuelve una vista de una porción de un objeto List. Cualquier

modificación realizada en esta vista se realiza también en el objeto List.

El método clear elimina elementos de un objeto List.

El método toArray devuelve el contenido de una colección, en forma de un arreglo.

Page 4: 2sintIva

La clase Vector maneja arreglos que pueden cambiar su tamaño en forma

dinámica. En cualquier momento dado,

un objeto Vector contiene un número de elementos menor o igual a su capacidad.

Si un objeto Vector necesita crecer, aumenta en base a su incremento de

capacidad. Si no se especifica un incremento de capacidad, Java duplica el

tamaño del objeto Vector cada vez que se requiere una capacidad adicional. La

capacidad predeterminada es de 10 elementos.

El método add de Vector agrega su argumento al final del objeto Vector. El método

insertElementAt inserta un elemento en la posición especificada. El método set

establece el elemento en una posición específica.

El método remove de Vector elimina del objeto Vector la primera ocurrencia de su

argumento. El método removeAllElements elimina todos los elementos del objeto

Vector El método removeElementAt elimina el elemento en el índice especificado.

El método firstElement de Vector devuelve una referencia al primer elemento. El

método lastElement devuelve una referencia al último elemento.

El método contains de Vector determina si el objeto Vector contiene la

claveBusqueda especifica cada como argumento. El método indexOf de Vector

obtiene el índice de la primera ubicación de su argumento. El método devuelve -1

si el argumento no se encuentra en el objeto Vector.

El método isEmpty de Vector determina si el objeto Vector está vacío. Los

métodos size y capacity determinan el número de elementos actuales en el objeto

Vector, y el número de elementos que pueden almacenarse en el objeto Vector sin

asignar más memoria, respectivamente.

Algoritmos de colecciones

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, el algoritmo fill establece cada elemento

del objeto List a un objeto Object especificado, y copy copia elementos de un

objeto List a otro objeto List. El algoritmo sort ordena los elementos de un objeto

List.

El algoritmo addAll anexa a una colección todos los elementos en un arreglo, el

algoritmo frequency calcula cuántos elementos en la colección son iguales al

elemento especificado, y disjoint determina si dos colecciones tienen elementos en

común.

Page 5: 2sintIva

Los algoritmos min y max buscan los elementos mayor y menor en una colección.

La interfaz Comparator proporciona un medio para ordenar los elementos de un

objeto Collection en un orden distinto a su orden natural.

El método reverseOrder de Collections devuelve un objeto Comparator que puede

usarse con sort para ordenar elementos de una colección en forma inversa.

El algoritmo shuffle ordena al azar los elementos de un objeto List.

El algoritmo binarySearch localiza un objeto Object en un objeto List ordenado.

Conjuntos

Un objeto Set es un objeto Collection que no contiene elementos duplicados.

HashSet almacena sus elementos en una tabla de hash. TreeSet almacena sus

elementos en un árbol.

La interfaz SortedSet extiende a Set y representa un conjunto que mantiene sus

elementos ordenados. La clase TreeSet implementa a SortedSet.

El método headSet de TreeSet obtiene una vista de un objeto TreeSet que es

menor a un elemento especificado.

El método tailSet obtiene una vista que es mayor o igual a un elemento

especificado. Cualquier modificación realizada a la vista se realiza al objeto

TreeSet.

Mapas

Los objetos Map asocian claves con valores y no pueden contener claves

duplicadas. Los objetos Map difieren de los objetos Set en cuanto a que los

objetos Map contienen tanto claves como valores, mientras que los objetos Set

sólo contienen valores. Los objetos HashMap almacenan elementos en una tabla

de hash, y los objetos TreeMap almacenan elementos en un árbol.

Los objetos Hashtable y HashMap almacenan elementos en tablas de hash, y los

objetos TreeMap almacenan elementos en árboles.

HashMap es una clase genérica que recibe dos argumentos de tipo. El primer

argumento de tipo especifica el tipo de la clave, y el segundo especifica el tipo de

valor.

Page 6: 2sintIva

El método put de HashMap agrega una clave y un valor en un objeto HashMap. El

método get localiza el valor asociado con la clave especificada. El método isEmpty

determina si el mapa está vacío.

El método keySet de HashMap devuelve un conjunto de las claves. Los métodos

size e isEmpty de map devuelven el número de pares clave-valor en el objeto

Map, y un valor booleano que indica si el objeto Map está vacío, respectivamente.

La interfaz SortedMap extiende a Map y representa un mapa que mantiene sus

claves en orden. La clase TreeMap implementa a SortedMap.

La clase Properties

Un objeto Properties es un objeto Hashtable persistente. La clase Properties

extiende a Hashtable.

El constructor de Properties sin argumentos crea una tabla Properties vacía sin

propiedades predeterminadas.

También hay un constructor sobrecargado que recibe una referencia a un objeto

Properties predeterminado que contiene valores de propiedades predeterminados.

El método setProperty de Properties especifica el valor asociado con el argumento

tipo clave. El método getProperty de Properties localiza el valor de la clave

especificada como argumento. El método store guarda el contenido del objeto

Properties en el objeto OutputStream especificado como el primer argumento. El

método load restaura el contenido del objeto Properties del objeto InputStream

que se especifica como el argumento.

Colecciones sincronizadas

Las colecciones del marco de trabajo de colecciones están desincronizadas. Las

envolturas de sincronización se proporcionan para las colecciones a las que

pueden acceder varios subprocesos en forma simultánea.

Colecciones no modificables

La API Collections proporciona un conjunto de métodos public static para convertir

colecciones en versiones no modificables. Las envolturas no modificables lanzan

excepciones UnsupportedOperationException si hay intentos de modificar la

colección.

Page 7: 2sintIva

Implementaciones abstractas.

El marco de trabajo de colecciones proporciona varias implementaciones

abstractas de las interfaces de colecciones, a partir de las cuales el programador

puede crear rápidamente implementaciones personalizadas completas.

Conclusiones

En este capítulo se presentó el marco de trabajo de colecciones de Java. Aprendió

a utilizar la clase Arrays para realizar manipulaciones con arreglos. Conoció la

jerarquía de colecciones y aprendió a utilizar las interfaces del marco de trabajo de

colecciones para programar con las colecciones mediante el polimorfismo.

También conoció varios algoritmos predefinidos para manipular colecciones. En el

siguiente capítulo presentaremos los applets de Java, los cuales son programas

en Java que, por lo general, se ejecutan en un explorador Web. Empezaremos con

applets de ejemplo que vienen con el JDK, y después le mostraremos cómo

escribir y ejecutar sus propios applets.

Page 8: 2sintIva

Cuestionario de autoevaluación.

19.1 Complete las siguientes oraciones:

a) Un(a) Iterator se utiliza para recorrer una colección y puede eliminar elementos

de la colección, durante la iteración.

b) Para acceder a un elemento en un objeto List, se utiliza el índice del elemento.

c) A los objetos List se les conoce algunas veces como secuencias

d) Las clases ArrayList y Vector de Java proporcionan las herramientas de

estructuras de datos tipo arreglo, que pueden cambiar su tamaño en forma

dinámica.

e) Si usted no especifica un incremento de capacidad, el sistema duplicará el

tamaño del objeto Vector cada vez que se requiere una capacidad adicional.

f ) Puede utilizar un(a) no modificable wrapper para crear una colección que

ofrezca acceso de sólo lectura a los demás, mientras que a usted le permita el

acceso de lectura/escritura.

g) Los objetos LinkedList se pueden utilizar para crear pilas, colas, árboles y

deques (colas con doble extremo).

h) El algoritmo disjoint de Collections determina si dos colecciones tienen

elementos en común.

19.2 Conteste con verdadero o falso a cada una de las siguientes

proposiciones; en caso de ser falso, explique por qué.

a) Los valores de tipos primitivos pueden almacenarse directamente en un objeto

Vector.

Falso; un objeto Vector sólo almacena objetos. La conversión autoboxing ocurre

cuando se agrega un tipo primitivo al objeto Vector, lo cual significa que el tipo

primitivo se convierte en su clase de envoltura de tipo correspondiente.

b) Un objeto Set puede contener valores duplicados.

Falso. Un objeto Set no puede contener valores duplicados.

Page 9: 2sintIva

c) Un objeto Map puede contener claves duplicadas.

Falso. Un objeto Map no puede contener claves duplicadas.

d) Un objeto LinkedList puede contener valores duplicados.

Verdadero.

e) Collections es una interfaz (interface).

Falso. Collections es una clase; Collection es una interfaz (interface).

f) Los objetos Iterator pueden eliminar elementos.

Verdadero.

g) Con la técnica de hashing, a medida que se incrementa el factor de carga,

disminuye la probabilidad de colisiones.

Falso. Con la técnica de hashing, a medida que aumenta el factor de carga, hay

menos posiciones disponibles, relativas al número total de posiciones, por lo que

la probabilidad de seleccionar una posición ocupada (una colisión) con una

operación de hashing se incrementa.

h) Un objeto PriorityQueue permite elementos null.

Falso. Una excepción NullPointerException se lanza si el programa trata de

agregar null a un objeto PriorityQueue.