2. Colecciones
Es un objeto que almacena un conjunto de referencias a otros objetos, dicho
de otra manera es una especie de arreglo (array) de objetos.
Las colecciones son dinámicas, no tienen un tamaño fijo y permiten añadir y
eliminar objetos en tiempo de ejecución.
Java incluye en el paquete java.util un diverso conjunto de clases para la
creación y manejo de las colecciones. Todas ellas proporcionan una serie de
métodos para realizar operaciones básicas sobre una colección:
Añadir objetos a la colección
Eliminar objetos de la colección
Obtener un objeto
Localizar algún objeto de la colección
Iterar a través de la colección
3. Colecciones – La interfaz Collection
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.
La interfaz Collection proporciona un método llamado iterator para
obtener un objeto Iterator.
La clase Collections proporciona métodos static para manipular
colecciones. Muchos de los métodos son implementaciones de algoritmos
polimórficos para buscar, ordenar, etcétera.
4. Colecciones – La interfaz Collection
Katy Sierra, Bert Bates - SCJP 6 Study Guide
5. Diagrama de decisión para el uso de colecciones
http://www.adictosaltrabajo.com/tutoriales/introduccion-a-colecciones-en-java/
6. Colecciones de tipo genéricos
El uso de colecciones basadas en tipos genéricos proporciona un mecanismo
que permite notificar al compilador el tipo de objeto que va a ser
almacenado en la colección.
Cualquier instrucción que intente almacenar en la colección un objeto de un
tipo que no sea el especificado provocará un error de compilación.
Dado que se conoce el tipo de objeto almacenado en la colección, no será
necesario realizar una conversión explícita (casting) durante su recuperación.
El tipo especificado durante la utilización de las colecciones genéricas
solamente pueden ser de tipo objeto, no siendo posible utilizar tipos básicos
(primitivos) de Java.
7. ArrayList
Un ArrayList representa una colección basada en índices, en la que cada
objeto de la misma tiene asociado un número (índice) según la posición que
ocupa dentro de la colección, siendo 0 la posición del primer elemento.
ArrayList
Clase Persona
0
1
2
n
Índices Class Persona{
private String id;
private String nombre;
private int edad;
}
001 Pedro 34
002 María 25
003 Luis 30
Objetos
8. Creación de un ArrayList
Para crear un ArrayList utilizamos la expresión:
ArrayList <tipo_objeto> variable = new ArrayList <tipo_objeto>();
Ejemplo:
//ArrayList de tipo cadena
ArrayList<String> arraylist=new ArrayList<String>();
//ArrayList de objetos del tipo Persona
ArrayList<Persona> arraylist=new ArrayList<Persona>();
9. Creación de un ArrayList
Ejemplo:
//Se crea una clase llamada Estudiante
public class Estudiante {
String id;
String nombre;
int edad;
Estudiante(String id,String nombre,int edad){
this.id = id;
this.nombre = nombre;
this.edad=edad;
}
}
10. Creación de un ArrayList - Ejemplo
import java.util.*;
public class EjemploColeccion {
public static void main(String args[]){
Estudiante estudiante1=new Estudiante("001","Pedro",35);
Estudiante estudiante2=new Estudiante("002","Maria",24);
Estudiante estudiante3=new Estudiante("003","Luis",28);
ArrayList<Estudiante> arraylist=new ArrayList<Estudiante>();
arraylist.add(estudiante1);
arraylist.add(estudiante2);
arraylist.add(estudiante3);
Iterator<Estudiante> itr=arraylist.iterator();
while(itr.hasNext()){
Estudiante estudiante=(Estudiante)itr.next();
System.out.println(estudiante.id+"t"+estudiante.nombre+"t"+estudiante.edad);
}
}
}
Crea el ArrayList de
objetos Estudiante
Instanciando objetos de la
clase Estudiante
Agregamos los objetos al
ArrayList (método add)
Se crea un objeto del tipo
Iterator
Recorremos el ArrayList
11. Algunos métodos de la clase ArrayList
add(Object objeto) añade un nuevo objeto a la colección.
add(int indice, Object objeto) añade un objeto a la colección en la
posición especificada por el índice, desplazando el resto de los elementos.
get(int indice) devuelve el objeto que ocupa la posición indicada.
remove(int indice) elimina de la colección el objeto que ocupa la
posición indicada.
clear() elimina todos los objetos de la colección.
indexOf(Object objeto) localiza en el ArrayList el objeto indicado cómo
parámetro, devolviendo su posición. En caso de que el objeto no se
encuentre en la colección la invocación al método devolverá -1.
size() devuelve el número de elementos almacenados en la colección.
12. Hashtable
Un Hashtable representa una colección basada en claves, dónde los objetos
almacenados en la misma (valores) no tienen asociado un índice numérico
basado en su posición, sino una clave que lo identifica de forma única dentro
de la colección. Una clave puede ser cualquier tipo de objeto.
Hashtable
Clase Persona
001
002
003
Objn
Claves
Objectos Class Persona{
private String id;
private String nombre;
private int edad;
private char sexo;
}
Pedro 34 ‘M’
María 25 ‘F’
Luis 30 ‘M’
Valor
Objetos
13. Hashtable
El uso de colecciones basadas en claves resulta útil en aquellas aplicaciones en
las que se requiera realizar búsquedas de objetos a partir de un dato que lo
identifica.
Por ejemplo, si se va a tratar una colección de objetos de tipo “Persona”,
resulta más practico almacenarlo en un hashtable, asociando como clave el
valor de atributo “Id” o “Código” del objeto Persona.
Creación de un objeto Hashtable:
//Declaración simple
Hashtable variable_hash = new Hashtable<>();
//Declaración tipos genericos
Hashtable<Obj, Obj> variable_hash = new Hashtable<Obj, Obj>();
Tipo de Objeto
(Valor)
Tipo de Objeto
(Clave)
14. Algunos métodos de la clase Hashtable
put(Object key, Object valor) añade a la colección el objeto valor,
asignándole la clave especificada por key. En caso de existir esa clave en la
colección, el objeto que tenía asignado esa clave se sustituye por el nuevo
objeto valor, devolviendo el objeto sustituido.
containsKey(Object key) indica si la clave especificada existe o no en la
colección.
get(Object key) devuelve el valor que tiene asociado la clave que se
indica en el parámetro.
remove(Object key) elimina de la colección el objeto cuya clave se
especifique en el parámero.
size() devuelve el número de elementos almacenados en la colección.
Enumeration keys() devuelve un objeto enumeration que permite iterar
sobre el conjunto de claves.
15. Ejemplo de Hashtable
//Creamos una clase llamada Estudiante
public class Estudiante {
//Atributos
private String id; private String nombre; private int edad;
Estudiante(String id,String nombre,int edad){
this.id = id;
this.nombre = nombre;
this.edad=edad;
}
//Metodos getters
public String getId() {
return id;
}
public String getNombre() {
return nombre;
}
public int getEdad() {
return edad;
}
}
16. Ejemplo de Hashtable
import java.util.*;
public class EjemploColeccion {
public static void main(String args[]){
//Creando objetos de la clase Estudiante
Estudiante estudiante1=new Estudiante("001","Pedro",35);
Estudiante estudiante2=new Estudiante("002","Maria",24);
Estudiante estudiante3=new Estudiante("003","Luis",28);
Hashtable<String, Estudiante> tablahash = new Hashtable<String,Estudiante>();
tablahash.put(estudiante1.getId(), estudiante1);
tablahash.put(estudiante2.getId(), estudiante2);
tablahash.put(estudiante3.getId(), estudiante3);
System.out.println(tablahash.get("002").getNombre());
System.out.println(tablahash.get("003").getNombre());
}
Se crea la tabla con key de tipo String,
y objetos del tipo Estudiante
Agregamos los objetos a la
tabla hash. Como clave el Id
del Estudiante y el objeto
Estudiante.
Con los métodos getters de Estudiantes se puede
ver al contenido del objeto
17. Iteración de un Hashtable: Interfaz Enumeration
Como un Hashtable no está basado en índices, no puede ser recorrido
utilizando una sentencia for. Para recorrer (iterar) sobre un Hashtable se
puede hacer uso del objeto enumeration.
Enumeration es un objeto que implementa la interfaz
java.util.Enumeration.
Los métodos de esta interfaz permiten recorrer una colección de objetos
asociada y acceder a ella.
Un objeto Enumeration lo podemos imaginar como una especie de
puntero o referencia, que puede ir apuntando a cada uno de los
elementos de la colección.
18. Metodos de la Interfaz Enumeration
nextElement() La llamada de este método sobre un objeto Enumeration
provoca que este pase a apuntar al siguiente objeto de la colección.
Inicialmente, un enumeration se encuentra apuntando a la posición que
está antes del primer objeto de la colección, por lo que la primera llamada
a este método devolverá el primer objeto.
hasMoreElements() indica si hay más elementos por recorrer en la
colección. Cuando el objeto enumeration este apuntando al último
elemento, la llamada a este método devolverá false.
19. Metodos de la Interfaz Enumeration
//Creamos la tabla hash
Hashtable<String, Estudiante> tablahash = new Hashtable<String,Estudiante>();
//Agregamos los objetos a la tabla
tablahash.put(estudiante1.getId(), estudiante1);
tablahash.put(estudiante2.getId(), estudiante2);
tablahash.put(estudiante3.getId(), estudiante3);
Enumeration<Estudiante> enumeration = tablahash.elements();
while (enumeration.hasMoreElements()) {
System.out.println("Estudiantes: "+enumeration.nextElement().getNombre());
}
Apuntamos al siguiente elemento de la tabla y
obtenemos el nombre de cada Estudiante
Se crea una instancia de la clase
Enumeration de tipo Estudiante
Se recorre la tablahash con el
objeto enumeration
20. Metodos de la Interfaz Enumeration
Si queremos saber cuales son las claves de un HashTable usamos el método
keys().
Enumeration<String> claves = tablahash.keys();
while (claves.hasMoreElements()) {
System.out.println(""+"hashtable claves: " + claves.nextElement());
}
También se puede obtener la enumeración de todas las claves mediante el
uso del método keys().
System.out.println("Claves: " +tablahash.keys());
21. La clase Vector
La clase Vector, al igual que ArrayList o LinkedList, también implementa
a List, pero de un modo especial. Este modo especial es sincronizado, lo
que permite que se pueda usar en entornos concurrentes (es decir, en
varios procesos que se ejecutan al mismo tiempo y hacen uso posiblemente
de los mismos recursos). Esta además es la principal característica que la
diferencia de otras clases presentadas anteriormente como ArrayList.
Se recomienda que si no es necesario se use ArrayList en vez de Vector.
Por tanto, solo utilizaremos la clase Vector si tenemos previstas
circunstancias especiales como procesos concurrentes.
Un objeto de tipo Vector contiene elementos que pueden ser accedidos por
un índice y puede aumentar o disminuir su tamaño dinámicamente en
tiempo de ejecución.
22. La clase Vector
Creación de un objeto vector:
Vector variable_vector = new Vector();
Vector<Objeto> variable_vector = new Vector<Objeto>();
Algunos métodos de la clase Vector:
addElement(Objeto) se añade un objeto al vector.
elementAt(int i) Devuelve el elemento en la posición indicada por i.
indexOf(Object elemento) Devuelve el índice de la primera aparición de elemento.
Si el objeto no está en el vector devuelve –1.
size( ) Devuelve el número de elementos en el vector.
23. La clase Vector
Algunos métodos de la clase Vector:
isEmpty() Devuelve true si el vector está vacío y false si contiene uno o más
elementos.
lastElement() Devuelve el último elemento del vector.
removeAllElements( ) Vacía el vector. Tras ejecutarse este método, el tamaño del
vector es cero.
removeElement(Object) Quita elemento del vector. Si existe en el vector más de una
instancia del objeto especificado, entonces se quita la primera. Devuelve true si se
hizo con éxito y false si el objeto no se encontró.
removeElementAt(int indice) Quita el elemento en la posición indicada por índice.
24. Ejemplo de la clase Vector
Creamos una clase “Persona”
public class Persona {
public int idPersona;
public String nombre;
public double altura;
public Persona(int idPersona, String nombre, double altura) {
this.idPersona = idPersona;
this.nombre = nombre;
this.altura = altura;
}
@Override
public String toString() {
return "Persona-> ID: "+idPersona+" Nombre: "+nombre+" Altura:
"+altura+"n";
}
}
Se sobrescribe el método toString para poder
mostrar los valores almacenados en los atributos
25. Ejemplo de la clase Vector
import java.util.Vector;
public class EjemploColeccion {
public static void main(String args[]){
Vector<Persona> vector = new Vector<Persona>();
int i = 1;
while (i<=5) {
vector.add(new Persona(i,"Persona_"+i,i+150));
i++;
}
for (Persona persona : vector) {
System.out.print(persona.toString());
}
}
}
Se crea un Vector del
tipo Persona
Persona-> ID: 1 Nombre: Persona_1 Altura: 151.0
Persona-> ID: 2 Nombre: Persona_2 Altura: 152.0
Persona-> ID: 3 Nombre: Persona_3 Altura: 153.0
Persona-> ID: 4 Nombre: Persona_4 Altura: 154.0
Persona-> ID: 5 Nombre: Persona_5 Altura: 155.0
26. Bibliografías
Martín, Antonio. Programador Certificado Java 2. Curso Práctico. Editorial
RA-MA. 2da Edición.
Joyanes L., Zahonero I. Programación en Java 6. Algoritmos, programación
orientada a objetos e interfaz gráfica de usuarios. McGRAW-HILL
INTERAMERICANA EDITORES, S.A. DE C.V. 1ra Edición.
Schildt H. Java Manual de referencia. McGRAW-HILL INTERAMERICANA
EDITORES, S.A. DE C.V. 7ma Edición