Está en la página 1de 9

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE CIENCIAS Y SISTEMAS


DEPARTAMENTO DE INFORMÁTICA

Guía de Laboratorio # 5.1


Nombre de la guía: Colecciones
Tiempo estimado: 2 horas
Autores:
 Yasser R. Membreño Gudiel
 Walger Herrera Treminio

Versión: 1.0

I. OBJETIVOS:
Que el estudiante sea capaz de:
 Implementar las clases definidas en el lenguaje de programación para la
construcción de aplicaciones que permiten la agrupación de múltiples
elementos dentro de una colección.

II. INTRODUCCIÓN TEÓRICA


Una colección, es un objeto simple que agrupa múltiples elementos en una
unidad singular. Las colecciones son utilizadas para almacenar, recuperar,
manipular y comunicar información agregada. Representan elementos de
información que forman un grupo natural, tales como, una mano de póker (una
colección de cartas), una carpeta de correos (colección de cartas) o un directorio
telefónico, por mencionar algunos.

La estructura de las colecciones es una arquitectura unificada para representar


y manipular colecciones. Todas las colecciones contienen lo siguiente:

 Interfaces: Son los tipos de datos abstractos que representan


colecciones. Interfaces permiten que las colecciones sean manipuladas
independientemente de los detalles de su representación. Generalmente
forman una jerarquía de interfaces.

 Implementaciones: Son las implementaciones concretas de las


interfaces. En esencia son estructuras de datos reusables.
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
 Algoritmos: Son todos los métodos que realizan cálculos útiles, tales
como búsquedas y ordenaciones.

Beneficios de las colecciones

Las colecciones proporcionan los siguientes beneficios:

 Reduce el esfuerzo de programación: Facilitando estructuras de datos


y algoritmos. Las colecciones te liberan para que te concentres en las
partes importantes de tu programa que en la carpintería de bajo nivel
requerida para hacer el trabajo.

 Incrementa la calidad y velocidad de los programas: Las colecciones


proporcionan alto rendimiento y calidad en sus implementaciones de
estructuras de datos y algoritmos útiles.

 Reduce el esfuerzo de diseñar nuevas APIs: Diseñadores e


implementadores no tienen que reinventar la rueda cada vez que vayan a
tener que usar una colección. En vez de eso, pueden usar las interfaces
estándar de colecciones.

Interfaces de colecciones

El núcleo de interfaces de colecciones encapsula diferentes tipos de colecciones,


las cuales son mostradas en la figura 1. Estas interfaces permiten que las
colecciones sean manipuladas independientemente de los detalles de su
representación.

Collection Map

Set List Queue Deque SortedMap

SortedSet

Figura 1: Núcleo de interfaces de colecciones


UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
Un conjunto (Set) es un tipo de colección especial, un conjunto ordenado
(SortedSet) es un tipo especial de conjunto (Set), y así sucesivamente. Note
también que hay dos tipos diferentes de jerarquías. Un mapa (Map) no es una
colección realmente.

La siguiente lista describe cada una de las interfaces en el núcleo de interfaces


de colecciones:

 Collection (Colección): La raíz de la jerarquía de colecciones.


Representa un grupo de objetos conocido por sus elementos. La interfaz
Collection es el denominador menos común de todas las colecciones, su
uso está basado cuando se desea un máximo de generalización de
colecciones posible.

 Set (Conjunto): Es una colección que no permite elementos duplicados.


Esta interfaz modela la abstracción del conjunto matemático y se usa para
representar conjuntos, tales como las cartas en una mano de póker, los
cursos en los horarios de estudiantes o los procesos ejecutándose en una
computadora.

Existen tres clases implementaciones de la interfaz de conjuntos:


HashSet, TreeSet y LinkedHashSet.

HashSet, que almacena sus elementos en una tabla hash, es la mejor


implementación por rendimiento.

 List (Lista): Una colección ordenada (a veces llamada secuencia). Las


listas pueden contener elementos duplicados.

Las clases implementadoras para la interfaz lista son: ArrayList, la cual


es usualmente la mejor implementación en rendimiento y LinkedList que
ofrece mejor rendimiento bajo ciertas circunstancias.

 Queue (Cola): Una colección usada para contener múltiples elementos


antes de procesarlos. Además de las operaciones básicas de las
colecciones, una cola proporciona operaciones adicionales como:
inserción, extracción e inspección de sus elementos.
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
La clase implementadora es LinkedList. Las implementaciones de cola
generalmente no permiten la inserción de elementos null, aunque la clase
LinkedList no lo prohíbe, es mejor evitar insertar valores nulos.

 Deque (Cola doble): Una colección usada para contener múltiples


elementos antes de procesarlos. Además de las operaciones básicas de
las colecciones, una cola proporciona operaciones adicionales como:
inserción, extracción e inspección de sus elementos.

Deque pueden ser usadas como primero en entrar primero en salir (PEPS
o FIFO) y último en entrar primero en salir (UEPS o LIFO). En un deque
todos los elementos nuevos pueden ser insertados, recuperados y
eliminados por ambos lados.

Las clases que implementan la interfaz Deque son ArrayDeque y


LinkedList.

 Map (Mapas): Es un objeto que mapea llaves a valores. Un mapa no


puede contener llaves duplicadas; cada llave puede mapear al menos un
valor.

Las clases implementadoras son: HashMap, TreeMap y


LinkedHashMap. Su comportamiento y rendimiento son parecidos a
HashSet, TreeSet y LinkedHashSet.

Ejemplo 1:

A continuación se presenta un ejemplo de uso de la colección Set, con sus clases


implementadoras el HashSet y el TreeSet. El programa agrega elementos a un
conjunto de datos y los ordena con el objeto de la clase TreeSet.

import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
*
* @author UNI
*/
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
public class SetApp {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int count[] = {34, 22, 10, 60, 30, 22};
Set<Integer> set = new HashSet<>();

for (int i = 0; i < 6; i++) {


set.add(count[i]);
}
System.out.println(set);

TreeSet sortedSet = new TreeSet<>(set);


System.out.println("Conjunto ordenado:");
System.out.println(sortedSet);

System.out.println("Primer elemento del conjunto: " + (Integer) sortedSet.first());


System.out.println("Ultimo elemento del conjunto: " + (Integer) sortedSet.last());

}
}

Ejecución

[34, 22, 10, 60, 30]


Conjunto ordenado:
[10, 22, 30, 34, 60]
Primer elemento del conjunto: 10
Ultimo elemento del conjunto: 60

Ejemplo 2:

En el siguiente ejemplo se hace uso de la colección List. Se implementa con las


clases ArrayList y LinkedList. Se le agregan elementos a los objetos de tipo
lista y luego se recorren los elementos para imprimir su valor.

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
*
* @author UNI
*/
public class ListApp {

public static void main(String[] args) {


List a1 = new ArrayList();
a1.add("Zara");
a1.add("Mahnaz");
a1.add("Ayan");
System.out.println(" Elementos de la lista a1");
for(Object name : a1){
System.out.print("\t" + name.toString());
}

List l1 = new LinkedList();


l1.add("Zara");
l1.add("Mahnaz");
l1.add("Ayan");
System.out.println();
System.out.println(" Elementos de la lista l1");
for(Object name:l1){
System.out.print("\t" + name.toString());
}
System.out.println("");
}
}

Ejecución

Elementos de la lista a1
Zara Mahnaz Ayan
Elementos de la lista l1
Zara Mahnaz Ayan

Ejemplo 3:

En el siguiente programa, una colección de tipo Cola es usada para implementar


una cuenta regresiva. La colección es cargada con todos los valores enteros
desde un numero especificado por la variable time hasta llegar a 1, en orden
descendente. Luego los elementos son eliminados de la colección y mostrados
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
en pantalla en intervalos de un segundo. Cuando termina muestra el mensaje
“Fin del conteo!”.

import java.util.LinkedList;
import java.util.Queue;
/**
*
* @author UNI
*/
public class QueueApp {
public static void main(String[] args) throws InterruptedException {
int time = 2;
Queue<Integer> queue = new LinkedList<>();

for (int i = time; i >= 1; i--)


queue.add(i);

while (!queue.isEmpty()) {
System.out.println(queue.remove());
Thread.sleep(1000);
}
System.out.println("Fin del conteo!");
}
}

Ejecución

5
4
3
2
1
Fin del conteo!

Ejemplo 4:

El siguiente ejemplo muestra el uso de los mapas. El programa genera una tabla
de frecuencias de las palabras en una variable de tipo cadena. La tabla de
frecuencia mapea cada palabra con el número de veces que esta se encuentre
en la cadena.
import java.util.HashMap;
import java.util.Map;
/**
*
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
* @author UNI
*/
public class MapApp {
public static void main(String[] args) {
Map<String, Integer> m = new HashMap<>();
args = "Buenos dias a todos que la pasen muy bien bien".split(" ");
// Initialize frequency table from command line
for (String a : args) {
Integer freq = m.get(a);
m.put(a, (freq == null) ? 1 : freq + 1);
}

System.out.println(m.size() + " Palabras distintas:");


System.out.println(m);
}
}

Ejecución

9 Palabras distintas:
{Buenos=1, que=1, muy=1, a=1, pasen=1, la=1, días=1, todos=1, bien=2}

III. ACTIVIDAD PRÁCTICA


Para la realización de los programas puede utilizarse cualquier editor de texto
(notepad, sublime Text 3, Visual Code).

Links de descarga:

Sublime Text 3: https://www.sublimetext.com/3

Visual Code: https://code.visualstudio.com/Download

Ejercicio 1:
Considere las cuatro interfaces, Set, List, Queue y Map. Seleccione la mejor y
desarrolle una aplicación para cada uno de los siguientes problemas:

 La UNI necesita registrar los nombres de todos sus empleados. Cada


mes, un empleado será seleccionado aleatoriamente del registro y recibirá
una beca para estudiar.

 La UNI ha decidido que cada nuevo servicio lleve el nombre de un


empleado pero solo el primer nombre será usado y cada nombre será
usado solo una vez. Prepare una lista de nombres de empleados únicos.
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE CIENCIAS Y SISTEMAS
DEPARTAMENTO DE INFORMÁTICA
 La UNI adquirió entradas para la temporada de la liga de béisbol
profesional para ser compartida entre los empleados. Crear una lista de
espera para este deporte popular.

IV Bibliografía
Aguilar, l. J. (2011). Programacion en Java 6, Algoritmos y programacion orientada a
objetos. Mexico: McGraw Hill.
https://www.tutorialspoint.com. (2018). Obtenido de
https://www.tutorialspoint.com/java/java_set_interface.htm
https://www.tutorialspoint.com. (2018). Obtenido de
https://www.tutorialspoint.com/java/java_map_interface.htm
https://www.tutorialspoint.com. (2018). Obtenido de
https://www.tutorialspoint.com/java/java_list_interface.htm
https://www.tutorialspoint.com. (2018). Obtenido de
https://www.tutorialspoint.com/java/java_collections.htm
ORACLE. (2017). https://docs.oracle.com. Obtenido de
https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html