Anda di halaman 1dari 8

Taller de Programación en Java Colecciones en Java

Colecciones en Java
Definiciones

Colección: Una colección es simplemente un objeto que agrupa múltiples elementos en una única unidad.
Framework de colecciones: Un framework de colecciones es una arquitectura unificada para representar y
manipular colecciones.
Todos los frameworks de colecciones poseen:
● Interfaces
Son tipos de datos abstractos que representan colecciones. Las interfaces permiten a las colecciones ser
manipuladas independientemente de los detalles de su implementación.
● Implementaciones
Son las implementaciones concretas de las interfaces de las colecciones. Son estructuras de datos reusables.
● Algoritmos
Son métodos que realizan tareas útiles, tales como búsquedas y ordenamientos, sobre los objetos que
implementan las interfaces de las colecciones.

Java Collections Framework (JCF)


En Java 1.2 fue introducido Java Collections Framework (JCF) el cual proporciona las funcionalidades de un framework
de colecciones, reemplazando a antiguas clases que poseían similares objetivos.

Jerarquía de las interfaces JCF

Estas interfaces permiten a las colecciones ser manipuladas independientemente de los detalles de su implementación. Se
podría decir que definen un comportamiento pero no el funcionamiento.
● Collection (Colección) - Es la raíz de la jerarquía y representa un grupo de objectos (elementos) . Java no
provee implementación para ésta interfaz.
● Set (Conjunto) – Es una colección que no puede contener elementos duplicados. Es utilizada para representar
conjuntos.
● List (Lista) – Es una colección que puede contener elementos duplicados. Se utiliza para tener control sobre en
que posición de la lista está cierto elemento y acceder a éste mediante un índice.
● Queue (Cola) - Es una colección utilizada para mantener elementos antes de su procesamiento. Ademas de las
operaciones básicas de una colección, provee operaciones adicionales de inserción, extracción y revisión
● Map (Mapa) – Es un objeto que representa pares Clave-Valor. Un Map no puede mantener Claves duplicadas.

Pagina 1
Taller de Programación en Java Colecciones en Java

Interfaz Collection
Esta interfaz como vimos anteriormente es una de las raíces de la jerarquía. Representa un conjunto de objetos de una
manera generalizada. Esta interfaz define una serie de métodos que serán los que el resto de interfaces, o clases que
nosotros realicemos, deban implementar :

public interface Collection<E> extends Iterable<E> {


// Basic operations
int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element); //optional
boolean remove(Object element); //optional
Iterator<E> iterator();

// Bulk operations
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c); //optional
boolean removeAll(Collection<?> c); //optional
boolean retainAll(Collection<?> c); //optional
void clear(); //optional

// Array operations
Object[] toArray();
<T> T[] toArray(T[] a);
}

Interfaz Set
Un Set es una colección que no puede contener elementos duplicados. La interfaz Set tiene solo los métodos heredados
de Collection con la restricción anteriormente dicha.

Implementaciones
Java provee tres implementaciones
● HashSet – Almacena elementos en una tabla hash, es la implementación de mejor rendimiento pero sus
elementos no están ordenados y pueden variar su posición a lo largo del tiempo.
● TreeSet – Almacena los elementos en un árbol , ordenados por su valores y es bastante mas lento que
HashSet.
● LinkedHashSet – Es implementada como una tabla hash en una lista enlazada, ordenando sus elementos a
medida que fueron insertados.

Interfaz List

Las listas pueden contener elementos duplicados. Sumados a las operaciones heredadas de Collection, la interfaz
List incluye las siguientes operaciones:

Pagina 2
Taller de Programación en Java Colecciones en Java

public interface List<E> extends Collection<E> {


// Positional access
E get(int index);
E set(int index, E element); //optional
boolean add(E element); //optional
void add(int index, E element); //optional
E remove(int index); //optional
boolean addAll(int index, Collection<? extends E> c); //optional

// Search
int indexOf(Object o);
int lastIndexOf(Object o);

// Iteration
ListIterator<E> listIterator();
ListIterator<E> listIterator(int index);

// Range-view
List<E> subList(int from, int to);
}

Implementaciones
La plataforma Java posee dos implementaciones de la interfaz List:

● ArrayList – Implementada interiormente mediante un arreglo de objetos, provee un tiempo constante


en acceso aleatorio
● LinkedList – Implementada con una lista de nodos doblemente enlazadas, provee mejor rendimiento
cuando son frecuentes las operaciones de inserción en las primeras posiciones de la lista y eliminación en
general. Pero provee un pobre acceso aleatorio.

Iteradores
Un iterador es un objeto que permite recorrer una colección y borrar elementos de ésta en forma selectiva. Un
iterador se obtiene de una colección mandándole el mensaje iterador() a la misma.

Un objeto iterador posee los siguientes métodos:


boolean hasNext(); Devuelve verdadero si la colección posee mas elementos.
E next(); Devuelve el siguiente elemento en la iteración.
void remove(); //optional Elimina el último elemento que fue devuelto por next()

El método remove() debe ser llamado una vez por llamada a next(), de lo contrario se tendrá un error en tiempo de
ejecución

Interfaz Map
Un Map es un objeto que relaciona claves a valores. Un Map no puede contener claves duplicadas, es decir cada clave
debe estar relacionada con a lo sumo un valor.

Pagina 3
Taller de Programación en Java Colecciones en Java

public interface Map<K,V> {

// Basic operations
V put(K key, V value);
V get(Object key);
V remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();

// Bulk operations
void putAll(Map<? extends K, ? extends V> m);
void clear();

// Collection Views
public Set<K> keySet();
public Collection<V> values();
public Set<Map.Entry<K,V>> entrySet();

// Interface for entrySet elements


public interface Entry {
K getKey();
V getValue();
V setValue(V value);
}

Implementaciones
● HashMap – Posee un alto rendimiento pero no garantiza el orden de los elementos, ni siquiera que no puedan
cambiar de orden por motivos de balanceo de carga.
● TreeMap - La implementación de esta clase ordena los elementos por orden ascendente de clave ya sea el orden
natural de los objetos o el orden establecido por el comparador que le pasemos en el constructor.
● LinkedHashMap – Rendimiento cercano a HashMap con ordenamiento basado en inserciones

Algoritmos
La clase Collections posee diferentes algoritmos que se aplican a colecciones. Esta clase tiene metodos estáticos los
cuales su primer argumento es la colección en la cual la operación es realizada. La gran mayoría de los algoritmos operan
sobre intancias de List, pero hay algunos que operan sobre las demas colecciones.
Los tipos de algoritmos son
● Ordenamiento
● Desordenamiento
● Búsqueda
● Hallazgo de valores extremos
● Composición
● Manipulación de datos.

Pagina 4
Taller de Programación en Java Colecciones en Java

Práctica
Antes de comenzar la práctica genere las siguientes clases pertenecientes al paquete libreria, las cuales serán utilizadas en
el resto del taller.

Los métodos toString() convierten a String un objeto. Por ej. para la clase Editorial su implementación sería:

public String toString()


{
return (this.idEditorial+" "+this.nombre);
}

1- Crear una clase Colleciones la cual posea un método estático llamado obtenerEditoriales() que devuelva una
lista de objetos editoriales que correspondan a la siguiente tabla Editoriales. El método deberá devolver una referencia a
la interfaz List y ser implementado internamente con una Arraylist.

Pruebe el método generado desde el método main() de la clase Principal


System.out.println(Colecciones.obtenerEditoriales());

El atributo out de la clase estática System, representa la salida estándar del Sistema (consola) ,el cual es un
PrintStream y por lo tanto se le puede pasar mensajes, por ejemplo println()

Pagina 5
Taller de Programación en Java Colecciones en Java

idEditorial nombre

1 Pretince Hall

2 Wiley

3 Wrox

4 Addison Wesley

5 O´Reilly

Tabla Editoriales

Solución
package libreria;

import java.util.*;

public class Colecciones {

static public List<Editorial> obtenerEditoriales()


{
Editorial editorial1 = new Editorial(1,"Pretince Hall");
Editorial editorial2 = new Editorial(2,"Wiley");
Editorial editorial3 = new Editorial(3,"Wrox");
Editorial editorial4 = new Editorial(4,"Addison Wesley");
Editorial editorial5 = new Editorial(5,"O´Reilly");

List<Editorial> listaEditorial = new ArrayList<Editorial>();

listaEditorial.add(editorial1);
listaEditorial.add(editorial2);
listaEditorial.add(editorial3);
listaEditorial.add(editorial4);
listaEditorial.add(editorial5);

return listaEditorial;
}
}

2- Cambie en el método obtenerEditoriales() la implementación de la lista a un LinkedList. Ejecute el


programa y saque conclusiones.

3- Cree en la clase Colecciones el método estático buscarEditorial, que busque en una lista de Editoriales un
objeto con el id suministrado como parámetro y que devuelva el objeto editorial. Para buscar en la lista utilice un
iterador.
Pruébelo desde el método main() con el siguiente código.
List miLista = Colecciones.obtenerEditoriales();
Editorial editorial =Colecciones.buscarEditorial(miLista, 1);
System.out.println(editorial.getNombre())

Pagina 6
Taller de Programación en Java Colecciones en Java

Solución
static public Editorial buscarEditorial(List<Editorial> lista, int idEditorial)
{
Editorial editorial;

Iterator<Editorial> it= lista.iterator();


while (it.hasNext())
{
editorial=it.next();
if (editorial.getIdEditorial()==idEditorial)
{
return editorial;
}
}
return null;

4- Cree el método estático obtenerLibros() que instancie los objetos Libros con sus objetos asociados y devuelva una
lista de ellos. Para crear los objetos fíjese en las tablas a continuación. Codifique también un método que recorra la lista y
muestre en pantalla en forma tabular los datos del libro.

idEditorial nombre

1 Pretince Hall

2 Wiley

3 Wrox

4 Addison Wesley

5 O´Reilly

idAutor Autor

1 Bruce Eckel

2 James McGovern

3 Ivor Horton

4 Joshua Bloch

5 Jonathan Knudsen

Pagina 7
Taller de Programación en Java Colecciones en Java

IdLibro isbn titulo Editorial Autor

1 1-2256 Thinking in Java Pretince Hall Bruce Eckel

2 2-7985 Java 2 Enterprise Edition 1.4 Bible Wiley James McGovern

3 1-9857 Beginning Java 2 JDK5 Edition Wrox Ivor Horton

4 0-1537 Effective Java Addison Wesley Joshua Bloch

6 0-956547 Learning Java O´Reilly Jonathan Knudsen

5- En un reciente concurso las editoriales Wiley, Addison-Wesley y Pretince Hall obtuvieron el primer, segundo y tercer
premio respectivamente. Cree el método obtenerEditorialesPremiadas() que devuelva un
Map<String,Editorial> conteniendo las editoriales galardonadas como valores y un String referente al premio
como clave. Utilice internamente los métodos obtenerEditoriales() para crearlas y buscarEditorial() para
filtrarlas por su idEditorial conocido. Pruebe el método creado desde la clase principal.
Solución

static public Map<String, Editorial> obtenerEditorialesPremiadas()


{
Map<String, Editorial> hashEditoriales = new HashMap<String, Editorial>();

List<Editorial> listaEditoriales = obtenerEditoriales();

hashEditoriales.put("1er Premio ", buscarEditorial(listaEditoriales, 2));


hashEditoriales.put("2do Premio ", buscarEditorial(listaEditoriales, 4));
hashEditoriales.put("3er Premio ", buscarEditorial(listaEditoriales, 1));

return hashEditoriales;
}

Ejercicios Opcionales-
1 - Modifique el método del ejercicio nro. 1 para que admita utilizar la interfaz Set. Agregue objetos duplicados y saque
conclusiones.
1 - Modifique el método del ejercicio nro. 6 con diferentes implementaciones de la interfaz Map. Agregue objetos
duplicados y saque conclusiones.

Pagina 8

Anda mungkin juga menyukai