2sintIva
-
Upload
rolando-rios -
Category
Documents
-
view
5 -
download
1
Transcript of 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
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.
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.
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.
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.
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.
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.
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.
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.