Академический Документы
Профессиональный Документы
Культура Документы
1 3
Beneficios de utilizar el
Interfaces para colecciones
marco de colecciones
• Reduce los esfuerzos de programación • Permiten manipular las estructuras
• Incrementa velocidad y calidad • Hay operaciones opcionales, es decir, una
• Ayuda a la interoperabilidad implementación concreta pudiera no tenerla.
• Reduce los esfuerzos de aprendizaje • Todas las colecciones del JDK implementan
• Reduce los esfuerzos de diseño todas las operaciones opcionales
• Fomenta la reutilización de software • Si se invoca una operación no soportada se
lanza la excepción
UnsupportedOperationException
2 4
1
Interface Collection Interface Map y SortedMap
5 7
6 8
2
Interfaces e
Interface Iterador
implementación
– Tiene una conducta mejorada que la del antiguo • Cada interface puede estar implementada por más
Enumeration de una clase
– Ahora se permite quitar elementos de la – Podemos utilizar una referencia a la interface para
colección con el iterador señalar a un objeto de una clase concreta
Collection c = new ArrayList();
public interface Iterator { – Todas estas clases tienen un constructor que admite un
boolean hasNext(); objeto que implemente la interface Collection
Object next(); Collection d = new ArrayList(c);
void remove(); // Opcional
} – ¿Cómo actúan estos constructores?
9 11
10 12
3
Interface Set II Un ejemplo de uso de Set
public interface Set {
// Operaciones basicas • ¿Cómo eliminar de una colección c todos los
int size();
boolean isEmpty(); elementos duplicados?
boolean contains(Object element);
boolean add(Object element); // Optional Collection noDups = new HashSet(c);
boolean remove(Object element); // Optional
Iterator iterator();
// Operaciones completas Ejercicios.
boolean containsAll(Collection c);
boolean addAll(Collection c); // Optional
– ¿Cómo hacer la unión, intersección y diferencia de
boolean removeAll(Collection c); // Optional conjuntos?
boolean retainAll(Collection c);
void clear();
//
//
Optional
Optional – Crear un programa como el anterior pero que mantenga
// Operaciones con Arrays un conjunto con las repetidas y otro con las no repetidas
Object[] toArray(); – Llaves y cerraduras
Object[] toArray(Object a[]);
}
13 15
14 16
4
Interface List II Ejemplo de interface List
private static void swap(List a, int i, int j) {
18 20
5
Métodos especiales de
Interface ListIterator
LinkedList
public interface ListIterator extends Iterator {
boolean hasNext(); • Permiten el acceso por los extremos
Object next();
void addFirst(Object)
boolean hasPrevious(); void addLast(Object)
Object previous(); Object getFirst()
Object getLast()
int nextIndex();
int previousIndex();
Object removeFirst()
Object removeLast()
void remove(); // Optional
void set(Object o);
void add(Object o);
// Optional
// Optional • Para poder utilizarse
} LinkedList l = new LinkedList();
Algoritmos de la clase
Collections aplicados a Interface Map I
List
• Métodos de clase • Mantiene claves y valores asociados
sort(List) • Las claves no pueden repetirse.
suffle(List) – Se controla por equals()
reverse(List)
fill(List,Object) • A lo sumo puede haber un valor por clave
copy(List dest, List src)
binarySearch(List,Object)
• Hay dos implementaciones en JDK
– HashMap
– TreeMap
• La antigua Hashtable implementa el interfaz
Map
22 24
6
Interface Map II Ejemplo de uso de Map
public interface Map { import java.util.*;
// Operaciones basicas public class Frecuencia {
Object put(Object key, Object value); private static final Integer UNO = new Integer(1);
Object get(Object key);
Object remove(Object key); public static void main(String args[]) {
boolean containsKey(Object key); Map m = new HashMap();
boolean containsValue(Object value); // Inicializa la tabla desde la linea de cmd
int size(); for (int i=0; i<args.length; i++) {
boolean isEmpty(); Integer freq = (Integer) m.get(args[i]);
m.put(args[i],
// Operaciones completas (freq==null ? UNO :
void putAll(Map t); new Integer(freq.intValue() + 1)));
void clear(); }
System.out.println(m.size()+" pal. distintas");
... System.out.println(m);
}
}
25 27
26 28
7
Ordenación II Ordenación Natural
• Si se intenta ordenar un tipo que no sabe ordenarse • Los objetos de una clase que implementen
se produce una excepción un orden natural pueden utilizarse para:
• ClassCastException
– Elementos en un set ordenado (SortedSet)
– Es posible definir una ordenación para cualquier tipo.
Dos maneras: – Claves en un map ordenado (SortedMap)
• Definiendo en la clase la interface Comparable (Ordenación – En listas que utilicen el método
natural) Collection.sort()
– int compareTo(Object o)
• Definiendo la interface Comparator • Todos las clases envoltorios (wrapper)
– int compare(Object o1, Object o2) tienen definido un orden natural
29 31
Ordenación por
Ejemplo de Comparable
Comparable
public interface Comparable { import java.util.*;
public int compareTo(Object o); •public class Persona implements
private String nombre;
Comparable {
8
Ordenación por
Interface SortedSet II
Comparator
public interface Comparator { public interface SortedSet extends Set {
int compare(Object o1, Object o2); // Vistas de rangos
SortedSet subSet(Object fromElement, Object toElement);
} SortedSet headSet(Object toElement);
SortedSet tailSet(Object fromElement);
• Existen versiones de todas las funciones de
ordenación que toman un argumento más: // elementos finales
Object first();
– Un objeto que implementa la interface Object last();
Comparator // acceso al Comparator
• Son válidas las consideraciones hechas }
Comparator comparator();
anteriormente
33 35
• Es un Set que mantiene sus elementos • Para las colecciones que implemente la
ordenados en orden ascendente. interface SortedSet hay dos nuevos
– El orden es: constructores
• Natural o – Uno toma un objeto que implemente la
• Definido en una Comparator en el momento de la interface Comparable y devuelve un
creación SortedSet vacío
– Por mantener los datos ordenados puede – Otro toma un SortedSet y devuelve otro
proporcionar nuevos métodos SortedSet con los mismos elementos y en el
– Lo implementa TreeSet mismo orden
34 36
9
Interface SortedMap I Ejemplo de SortedMap
import java.util.*;
• Es muy parecido a SortedSet public class Frecuencia {
private static final Integer UNO = new Integer(1);
• Un SortedMap es un Map que mantiene public static void main(String args[]) {
sus claves en orden (natural o dado en la SortedMap m = new HashMap();
// Inicializa la tabla desde la linea de cmd
creación) for (int i=0; i<args.length; i++) {
Integer freq = (Integer) m.get(args[i]);
• Añade nuevos métodos m.put(args[i],
(freq==null ? UNO :
• Lo implementa TreeMap new Integer(freq.intValue() + 1)));
}
System.out.println(m.size()+" pal. distintas");
System.out.println(m);
}
}
37 39
38 40
10
Colecciones de solo lectura
•Si se intenta una operación de modificación
UnsupportedOperationException
41
Implementaciones
Implementaciones
Hash Resizable Balanced Linked
Table Array Tree List
Interfaces Set HashSet TreeSet
SortedSet TreeSet
List ArrayList LinkedList
Vector
Map HashMap TreeMap
HashTable
SortedMap TreeMap
42
11