Está en la página 1de 28

UNIVERSIDAD NACIONAL DE CAJAMARCA

FACULTAD DE INGENIERÍA

ALGORITMOS Y ESTRUCTURA DE
DATOS I
Colecciones: conjuntos y listas
Introducción

Colecciones
Conjuntos y Listas
¿Qué observa en la figura?
Recordemos

• Dada la siguiente instrucción:


– int[] v = new int[10];
• ¿Qué sucede si mostramos v?
• Si cada entero necesita 4 bytes para ser
almacenado y del arreglo “v” hemos
guardado solo 3 enteros, ¿cuánto de
memoria consumimos?
• ¿Cómo se guarda un arreglo en la
memoria RAM?
• ¿Cómo puedo almacenar varios elementos
de un mismo tipo?
• ¿Cómo podemos crear una colección de
objetos?
• ¿Qué ventajas y desventajas tiene la
propuesta planteada?
¿Qué pasaría si…

• … me piden crear una


lista de fracciones que
se inserten una a una
pero una vez que se
muestren están ya
ordenadas?
Logro Esperado

• Al término de la sesión, el
estudiante elabora un
programa que solucione
el ejercicio propuesto a
través de un menú de
opciones, manteniendo
su código ordenado y fácil
de mantener.
Desarrollo del
tema
Colecciones en Java
Collections
Introducción

• Hay veces que los arreglos no son adecuados o suficientes por


características del problema que hay que resolver.

• Puede ser que se necesite almacenar elementos, pero que no


se sepa cuántos elementos se van a tener, en este caso, un
arreglo con numero fijo de elementos no es adecuado. Para
solucionar estos problemas surgen las típicas agrupaciones de
elementos, pilas, colas, tablas hash, conjuntos, etc.
Collection

• Para estos tipos de agrupaciones, Java proporciona las


llamadas Collections (Colecciones) que proporcionan varias
abstracciones para conjuntos (Set), listas (List), tablas hash
(Map), etc.

• La jerarquía Collection.Collection es una interfaz no una clase;


la diferencia entre clase e interfaz es que una interfaz es una
clase que no tiene implementados sus métodos.
Collection (Interfaz)

public interfaz Collection{


boolean add(Object o);
boolean addAll(Collection c);
void clear();
boolean contains(Object o);
boolean containsAll(Collection c);
boolean equals(Object o);
int hashCode();
boolean isEmpty();
Iterator iterator();
boolean remove(Object o);
boolean removeAll(Collection c);
boolean retainAll(Collection c);
int size();
Object[ ] toArray();
Object[ ] toArray(Object[ ] a);
}
Colecciones (Interfaz Collections)

• Todas las colecciones se encuentran en el paquete java.util.*


• java.util.Collection es la raíz de la jerarquía de las colecciones
• Existirán especializaciones que permitan elementos duplicados
o no, que permitan ordenar los elementos o no, etc.
• Esta clase contiene la definición de todos los métodos
genéricos que deben implementar las colecciones.
Colecciones (Interfaz Collections)

• Métodos de Operaciones Básicas:


– int size(): Número de elementos que contiene.

– boolean isEmpty(): Si no contiene ningún elemento.

– boolean contains(Object elemento): Si contiene ese elemento.

– boolean add(Object elemento): Añadir un elemento.

– boolean remove(Object elemento): Borrar un elemento.

– Iterator iterator(): Devuelve una instancia de Iterator.


Colecciones (Interfaz Collections)

• Métodos de operaciones masivas:


– boolean containsAll(Collection c): Si contiene todos esos elementos.

– boolean addAll(Collection c): Añade todos esos elementos.

– boolean removeAll(Collection c): Borra todos esos elementos.

– boolean retainAll(Collection c): Borra todos los elementos menos esos concretos.

– void clear(): Borra todos los elementos.


Colecciones (Interfaz Collections)

• Métodos de Operaciones con Arreglos:


 Object[ ] toArray(): Devuelve un array con todos los elementos.

 Object[ ] toArray(Object a[ ]): Devuelve un array con todos los elementos. El tipo será el
del array enviado.

• Las colecciones no permiten el uso de tipos primitivos; por lo


que, si necesitamos trabajar con ellos habrá que usar los
Wrappers de tipos primitivos.
Iterator

• El interfaz Iterator representa un componente que permite


iterar sobre los elementos de una colección.
• Todas las colecciones ofrecen una implementación de Iterator
por medio del método:
public Iterator iterator();
• Sus métodos son:
boolean hasNext(): Si tiene más elementos.
Object next(): Devuelve el primer elemento y se queda apuntando al siguiente.
boolean remove(): Elimina el primer elemento y se queda apuntando al siguiente.
Set.

• El interfaz Set hereda del interfaz


Collection. Pero no añade la
definición de ningún método nuevo.
• No permite tener elementos
duplicados.
• Para saber si un elemento está
duplicado, hace uso del método:
– public boolean equals(Object elemento);
• Existen distintas implementaciones
de esta interfaz.
Set. Clases que implementan la interfaz Set

• HashSet (SDK 1.2.X.)


– Ofrece el acceso más rápido cuando dicho acceso es aleatorio.
– Su orden de iteración es impredecible.
• LinkedHashSet (SDK 1.4.X.)
– Su orden de iteración es el orden de inserción.
• TreeSet (SDK 1.2.X.)
– Su orden de iteración depende de la implementación que los elementos hagan
del interfaz java.lang.Comparable.
– public int compareTo(Object elemento);
Jerarquía de la Colección Set
List

• El interfaz List hereda del interfaz Collection.


• Representan colecciones con elementos en secuencia. Es decir,
con orden.
• Permite tener duplicados.
• Es accesible mediante índice, de manera que se puede:
– Acceder a un elemento concreto de una posición.
– Insertar un elemento en una posición concreta.
List

• Métodos para Acceso Posicional:


– Object get(int index): Devuelve el elemento de esa posición.
– Object set(int index, Object elemento): Reemplaza el elemento de esa posición con ese
elemento.
– void add(int index, Object elemento): Inserta ese elemento en esa posición.
– Object remove(int index): Elimina el elemento de esa posición.
– boolean addAll(int index, Collection c): Inserta todos esos elementos en esa posición.
List

• Métodos para Búsqueda:


– int indexOf(Object elemento):
Devuelve la posición de la primera
ocurrencia de ese elemento.
– int lastIndexOf(Object elemento):
Devuelve la posición de la última
ocurrencia de ese elemento.
• Subcolecciones:
– List subList(int from, int to): Devuelve
una lista con los elementos
comprendidos entre ambas posiciones.
• Existen distintas implementaciones
de ésta interfaz.
List. Clases que implementan la interfaz List

• ArrayList (SDK 1.2.X.)


– Ofrece un tiempo de acceso óptimo cuando dicho acceso es aleatorio.
• LinkedList (SDK 1.2.X.)
– Ofrece un tiempo de acceso óptimo cuando dicho acceso es para añadir o
eliminar elementos del comienzo y final de la lista (tipico para pilas).
• Vector
– Es como el ArrayList pero sincronizando lo que penaliza notablemente el
rendimiento.
– La sincronización es importante cuando más de un thread (hilo de ejecución) va
a acceder a la colección.
Jerarquía de la interfaz List
Recordemos lo
aprendido
Recordemos algunos
conceptos
¿Qué aprendí?

• ¿Qué es una Colección?


• ¿En qué se diferencia de un vector
tradicional?
• ¿Cuál es la diferencia entre una clase y una
interfaz?
• ¿Qué clases implementan cada colección?
• ¿Cuál es la diferencia entre estas
colecciones?
• ¿Qué método me permite añadir un
elemento a una colección?
• ¿en que se diferencia Iterator de
ListIterator.
• ¿Qué utilizaría para insertar fracciones y al
mostrarlas ya estén ordenadas?

Aplicando lo
aprendido

Ejercicios
Aplicando lo aprendido

• Crear un menú de opciones que


permita gestionar la información
de un contacto a través del
siguiente menú:
– [1] Listar contacto
– [2] Nuevo
– [3] Modificar
– [4] Buscar
– [5] Eliminar
– [6] Ordenar
– [7] salir
Aplicando lo aprendido

• Ejercicio propuesto del logro


– Se pide implementar un programa
que gestione a través de un menú
de opciones estudiantes, cursos y
la matrícula de los mismos,
teniendo en cuenta que un
estudiante puede llevar varios
cursos y un curso puede ser llevado
por varios estudiantes

También podría gustarte