Java colecciones

26
Prof. Renny Batista Programación III Octubre, 2015 Colecciones en Java

Transcript of Java colecciones

Page 1: Java colecciones

Prof. Renny Batista Programación III Octubre, 2015

Colecciones en Java

Page 2: Java colecciones

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

Page 3: Java colecciones

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.

Page 4: Java colecciones

Colecciones – La interfaz Collection

Katy Sierra, Bert Bates - SCJP 6 Study Guide

Page 5: Java colecciones

Diagrama de decisión para el uso de colecciones

http://www.adictosaltrabajo.com/tutoriales/introduccion-a-colecciones-en-java/

Page 6: Java colecciones

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.

Page 7: Java colecciones

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

Page 8: Java colecciones

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>();

Page 9: Java colecciones

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; } }

Page 10: Java colecciones

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

Page 11: Java colecciones

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.

Page 12: Java colecciones

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

Page 13: Java colecciones

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)

Page 14: Java colecciones

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.

Page 15: Java colecciones

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; } }

Page 16: Java colecciones

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

Page 17: Java colecciones

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.

Page 18: Java colecciones

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.

Page 19: Java colecciones

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

Page 20: Java colecciones

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());

Page 21: Java colecciones

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.

Page 22: Java colecciones

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.

Page 23: Java colecciones

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.

Page 24: Java colecciones

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

Page 25: Java colecciones

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

Page 26: Java colecciones

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