95058_10_11185_e07dc2f7320f847c23d7dfb8b0d9cddb
-
Upload
paul-marshall -
Category
Documents
-
view
3 -
download
2
description
Transcript of 95058_10_11185_e07dc2f7320f847c23d7dfb8b0d9cddb
-
Taller de Programacin
Clase 06
Colecciones
-
Colecciones en Java
Los lenguajes de programacin proporcionan utilidades
que permiten al desarrollador crear estructuras de
datos.
Java posee el API Collections.
Se introdujo con la Java2SE (versin 1.2 de Java
Standar Edition)
Objetivo: proporcionar clases, interfaces y algoritmos
para utilizar las estructuras de una manera estandar.
-
Base del API Collections de Java
Collection Map
List Set
SortedSet
SortedMap
Conjunto de interfaces que forman la base del API
Collections.
-
API Collections de Java
La jerarqua tiene dos races:
Collection trabaja sobre conjuntos de elementos
singulares.
Map trabaja sobre pares de valores.
-
Interfaz Collection
boolean add(Object element)
boolean remove(Object element)
int size()
boolean isEmpty()
boolean contains(Object element)
Iterator iterator()
boolean containsAll(Collection collection)
boolean addAll(Collection collection)
void clear()
void removeAll(Collection collection)
void retainAll(Collection collection)
-
Interfaz Collection
Collection es una interfaz (no proporciona ninguna
implementacin concreta).
La base para las clases concretas del API se
encuentra en la clase AbstractCollection.
Para crear estructuras se debe:
1. Crear una clase que implemente todos los
mtodos de Collection.
2. Crear una clase que herede de AbstractCollection
e implemente los mtodos necesarios, como por
ejemplo size().
-
Interfaz List
Define un conjunto de datos ordenados permitiendo
elementos duplicados.
Aade operaciones con ndice y la posibilidad de
trabajar con una parte de la lista.
void add(int index, Object element)
boolean addAll(int index,
Collection collection)
Object get(int index)
int indexOf(Object object)
int lastIndexOf(Object object)
Object remove(int index)
Object set(int index, Object element)
-
Interfaz List
ListIterator listIterator()
ListIterator listIterator(int comienzo)
List sublist(int inicio, int fin)
Los dos primeros mtodos devuelven una vista de la
coleccin de datos (Iterator) que permiten recorrer
sus elementos.
La interfaz ListIterator extiende a Iterator
permitiendo realizar recorridos bidireccionales, aadir
o modificar elementos de la coleccin.
-
Ejemplo
List list = .........
ListIterator iterador =
list.listIterator(list.size());
while (iterator.hasPrevious()) {
Object element = iterator.previous();
System.out.println(element);
}
Se crea un iterador cuyo cursor se encuentra en la
ltima posicin de la lista.
Se recorre la lista en orden inverso mostrando los
elementos por pantalla.
La combinacin de List-ListIterator proporciona una
forma elegante de recorrer la estructuras de datos.
-
Interfaz List
En el API Collections dispone de dos
implementaciones concretas de la interfaz List:
ArrayList (Vector en Java 1.1 con mtodos sincronizados) LinkedList.
List
ArrayList LinkedList
-
Clases ArrayList y LinkedList
ArrayList: No tiene ningn mtodo sincronizado
(soporta el acceso concurrente a los datos).
Se representa internamente utilizando un array de
objetos.
Comienza con un tamao que se puede especificar
en el constructor. Cuando se llena, aumenta su
tamao en un 50% o 100% dependiendo del SDK.
LinkedList: Est implementada mediante una lista denodos doblemente enlazada.
-
Ejemplo
import java.util.*;
public class Ejemplo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(Liz);
list.add(Rosa);
list.add(Marta);
list.add(Luis);
System.out.println(list);
List list1 = new LinkedList(list);
Iterator it = list1.iterator();
while (it.hasNext()) {
System.out.print(it.next() + );
}
}
}
Salida:
[Liz, Rosa, Marta, Luis]
Liz Rosa Marta Luis
-
Interfaz Set
Hereda de Collection y no aade ningn mtodo.
Representa un conjunto de datos (sin duplicados).
Si se intenta aadir un elemento que ya se
encontraba, no se producir ningn cambio.
Para determinar si un dato ya se encuentra se basan
en los mtodos de la clase Object: equals() y
hashCode().
El API de Collections proporciona dosimplementaciones de esta interfaz :
HashSet y TreeSet.
-
Interfaz Set
HashSet y TreeSet son implementaciones de lainterfaz Set.
AbstractSet implementa algunos mtodos de la
interfaz Set y sobreescribe los mtodos equals y el
mtodo hashCode().
Set
HashSet TreeSet AbstractSet
-
Interfaz Set
Implementa el conjunto de datos utilizando un tabla
hash (HashMap).
Los elementos no estn ordenados y pueden variar la
posicin por las operaciones de balanceo.
Al basarse en una tabla hash para aadir objetos
propios hay que sobreescribir el mtodo hashCode().
Por defecto, dos elementos se consideren iguales si:
Devuelven true al utilizar equals Devuelven el mismo hashCode()
-
Interfaz Set
class MyObject {private int aValue = -1;public MyObject(int pValue) {this.aValue = pValue;
}
public boolean equals(Object pObj) {if (!(pObj instanceof MyObject))return false;
if (((MyObject)pObj).value == this.aValue)return true;
elsereturn false;
}
}
-
Interfaz Set
Set set = new HashSet();
set.add(new MyObject(5));
set.add(new MyObject(7));
System.out.println(set.contains(new MyObject(5));
Se cre una clase MyObject y se sobreescribi el
mtodo equals(). As dos instancias son iguales si
tienen el mismo valor pero no se sobre escruibi el
mtodo hashCode().
Por lo tanto, contains() devuelve false porque se le
pasa una instancia diferente (hashCode diferente que
el de la instancia del conjunto con valor 5).
false
-
Interfaz Set
class MyObject {private int aValue = -1;public MyObject(int pValue) {this.aValue = pValue;
}
public boolean equals(Object pObj) {if (!(pObj instanceof MyObject))return false;
if (((MyObject)pObj).value == this.aValue)return true;
elsereturn false;
}
public int hashCode() {
return aValue;
}
}
Sobreescribir
hasCode()
-
Interfaz TreeSet
Esta implementacin utiliza un TreeMap para
almacenar los objetos.
Los objetos se guardan ordenados ascendentemente
segn el orden del comparador que se pase en el
constructor.
El comparador debe ser consecuente con el mtodo
equals() de los elementos del conjunto ya que el
funcionamiento de la estructura se basa en el mtodo
equals pero el algoritmo de ordenamiento se basa en
el mtodo compareTo() de la interfaz Comparator.
Si dos objetos son iguales paar el mtodo
compareTo() lo sern para el conjunto (no se inserta)
aunque el mtodo equals() diga lo contrario.
-
Ejemplo
import java.util.*;
public class Ejemplo {
public static void main(String[] args) {
Set set = new HashSet();
set.add(Ins);
set.add(Ana);
set.add(Sonia);
set.add(Laura);
set.add(Rebeca);
System.out.println(set);
Set sortedSet = new TreeSet(set);
System.out.println(sortedSet);
}
}Salida:
[Laura, Ins, Sonia, Rebeca, Ana]
[Ana, Ins, Laura, Rebeca, Sonia]
-
Interfaz Map
Define una estructura de datos que mapea claves
con valores sin permitir claves duplicadas.
Object put(Object clave, Object valor)
void putAll(Map mapa)
void clear()
Object remove(Object clave)
Object get(Object clave)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
Set keySet()
Collection values()
Set entrySet()
-
Interfaz Map
La API Collections ofrece dos implementaciones de la
interfaz Map: HashMap y TreeMap.
-
Interfaz HashMap
Utiliza una tabla hash.Permite el valor null tanto como clave o valor.No garantiza el orden de los elementos.Tiene dos parmetros que afectan a su rendimiento :capacidad inicial (capacidad que tiene la tablacuando es creada) y factor de carga (medida de lacantidad que podemos dejar llenarse a la tabla antesde que su tamao deba aumentarse. Cuando elnmero de entradas en la tabla excede el productodel factor de carga y la capacidad actual, se doblarla capacidad llamando al mtodo rehash.Si la capacidad inicial es mayor que el mximonmero de entradas dividido por el factor de carga, laoperacin de rehash nunca ocurrir.
-
Interfaz TreeMap
La implementacin 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 se pase en el constructor.
Como ocurre en la clase TreeSet el comparador ha
de ser consistente con el mtodo equals().