Java09 PDF
Java09 PDF
En esta unidad vamos a estudiar las múltiples maneras que ofrece el lenguaje Java
para tratar con conjuntos de elementos, colecciones o listados.
Veremos cuando es conveniente utilizar cada uno, y como obtener valores de estos
conjuntos.
1
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L1 – Implementaciones del interface Collections
Este término en java es bastante reciente (desde la versión 1.5, actualmente 1.6)
Recuerde
2
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Un esquema general del interface Collections es:
Interface Collection
Recuerde
3
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Las operaciones principales que ofrece este interface son:
Interface List
Interface Set
El interface set, tiene las mismas características que Collections pero añade la
restricción de que no pueden aparecer elementos duplicados.
4
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Interface Queue
Este interface está creado para utilizar las características de las colas de
datos.
Las colas siguen el patrón FIFO ( “First In - First Out” - “lo que entra primero, sale
primero”).
5
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L2 – Analizar la interfaz Map
6
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Nota
HashMap
import java.util.HashMap;
Hemos indicado que la clave va a ser un valor de tipo Integer y que admite en la
colección valores de tipo String, si intentamos introducir otro tipo de valores el
compilador nos avisará del error.
7
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
HashTable
import java.util.Hashtable;
}
}
LinkedHashMap
Es una clase que extiende HashMap, por lo que posee todas sus funcionalidades.
Es más rápido a la hora de recorrer los datos pero más lento al insertarlos.
import java.util.LinkedHashMap;
}
}
8
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
TreeMap
Es más lenta tanto para recorrer como para insertar nuevos datos.
import java.util.TreeMap;
En este caso a pesar del orden de inserción, al recorrerlos los devolverá ordenados
por el campo clave.
Nota
La manera de insertar valores en las diferentes
implementaciones de Map es idéntica lo que hay
que pensar es que uso va a tener la colección y
utilizar la correspondiente según las características
que poseen.
9
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L3 – Examinar las clases colección tradicionales
SET
HashSet
10
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
A cada objeto le corresponde un único valor Hash, y dos objetos que
sean iguales tendrán ese mismo valor.
LinkedHashSet
Esta clase Hereda de hashSet por lo que posee todas sus características,
pero añade que los objetos están doblemente enlazados y se mantiene
siempre el orden de inserción.
TreeSet
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
LIST
12
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
ArrayList
Ventajas
Inconvenientes
Por defecto un ArrayList tiene una capacidad para 10 elementos, pero si este
rango se completa lo amplia siguiendo la fórmula : (capacidad * 3) / 2 + 1
LinkedList
Ventajas
Inconvenientes
Vector
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
13
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
public class UsoList {
public static void main (String args[]){
//Creación de un arrayList de Strings
List<String> lista = new ArrayList<String>();
lista.add("Valor1");
lista.add("Valor2");
lista.add("Valor3");
Podemos observar que cuando hemos utilizado las listas en la creación del objeto
hemos utilizado el interface genérico (gracias al polimorfismo):
Pero con el polimorfismo hace que el cambio de un tipo de lista sea más sencillo.
14
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
QUEUE
Son conjuntos de datos FIFO (First in first out), es decir, el primer elemento en
introducirse en la cola será el primero que se obtendrá al iterar la colección, y así
sucesivamente.
LinkedList
PriorityQueue
15
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Un ejemplo en código Java es:
import java.util.PriorityQueue;
import java.util.Queue;
Nota
Es necesario conocer todas las ventajas e
inconvenientes de las implementaciones de
Collection para elegir la más adecuada (penalice
menos rendimiento) a las necesidades concretas
del programa.
16
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L4 – Orden con Comparable y Comparator
Además hay objetos que tienen predefinido unos métodos de ordenación como
puede ser la clase String.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Collections.sort(lista);
//Pasa a estár ordenada alfabéticamente
System.out.println("lista ordenada:"+lista);
}
}
Nos hemos declarado una lista de String que por defecto aparecerá ordenada tal y
como hemos insertado los elementos.
Como la lista es de tipo String, este objeto Java por defecto implementa el interface
Comparable que nos permitirá devolverla ordenada alfabéticamente si llamamos al
método sort.
Debemos hacer exactamente lo mismo que hace el lenguaje Java para sus clases
propias, implementar el interface Comparable o Comparator en función de las
necesidades.
17
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Comparable
18
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
2. Una vez definido el criterio podemos utilizar el método sort y nos
devolverá la lista ordenada por el criterio definido.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
}
}
19
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Comparator
import java.util.Comparator;
@Override
public int compare(Persona o1, Persona o2) {
Dado que queremos ordenar por nombre realizamos la comparación por este
campo.
import java.util.Comparator;
@Override
public int compare(Persona o1, Persona o2) {
return o1.getNombre().compareTo(o2.getNombre());
}
2. Una vez que hemos creado la clase que compara podemos utilizarla en el
método sort indicándole que la ordenación debe realizarse bajo ese
criterio.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
20
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
//Por defecto viene ordenada tal y como se ha insertado
Collections.sort(lista,new PersonasPorNombre());
System.out.println("Lista ordenada por Nombre:");
//Pasa a estár ordenada alfabéticamente
for(int i=0;i<lista.size();i++) {
System.out.println(lista.get(i).getNombre() + "- " +
lista.get(i).getApellidos());
}
}
}
Collections.sort(nombreListaOrdenar,new ClaseComparator());
21
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Nota
22
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L5 – Utilizar colecciones genéricas
Una colección en Java es un conjunto de valores que son almacenados como tipo
Object.
Además garantizan que en una misma colección no haya objetos de varios tipos.
Nota
}
}
import java.util.ArrayList;
import java.util.List;
23
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
3. Añadimos valores llamando al método add de la colección
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import java.util.List;
Recuerde
25
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L6 – Refactorizar código no genérico existente
26
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L7 – Escribir un programa para iterar una colección
Una vez que sabemos cómo añadir elementos a una colección vamos a aprender
como iterarla, para recuperar sus valores.
import java.util.ArrayList;
import java.util.List;
//Iteramos la lista
for (int i=0; i<=listaPersonas.size() -1; i++){
System.out.println("La Datos de la persona son:" +
listaPersonas.get(i).getNombre() + " " +
listaPersonas.get(i).getApellidos()
+ " " + listaPersonas.get(i).getEdad());
}
}
}
Para saber el final de la iteración hemos invocado el método size() que nos
devuelve el tamaño de la lista.
27
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
L8 – Examinar el bucle loop mejorado
Esta estructura de iteración proporciona la gran ventaja de que no hay que trabajar
con índices por lo que se evitan las excepciones de acceso ilegal a memoria.
El mismo ejemplo que el anterior pero utilizando este nuevo bucle es:
import java.util.ArrayList;
import java.util.List;
//Iteramos la lista
for (Persona persona: listaPersonas){
System.out.println("La Datos de la persona son:" +
persona.getNombre() + " " + persona.getApellidos()
+ " " + persona.getEdad());
}
}
}
28
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS
Recuerde
29
UNIDAD DIDÁCTICA 9. – API COLLECTIONS Y GENERICS