95058_10_11185_e07dc2f7320f847c23d7dfb8b0d9cddb

24
Taller de Programación Clase 06 Colecciones

description

digitales

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