Hashtable
Upcoming SlideShare
Loading in...5
×
 

Hashtable

on

  • 2,322 views

Funcionamiento básico de una tabla hash e implementación de Java de esta clase.

Funcionamiento básico de una tabla hash e implementación de Java de esta clase.

Statistics

Views

Total Views
2,322
Views on SlideShare
2,273
Embed Views
49

Actions

Likes
0
Downloads
34
Comments
0

1 Embed 49

http://192.168.1.5 49

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Hashtable Hashtable Presentation Transcript

  • Funcionamientobásico
    Hashtable
    {David Moreno García }
  • ¿Quéesunatabla hash?
    ¿ ?
    Una tabla hash o mapa hash es una estructura de datos que asocia llaves o claves con valores.
    Se usa principalmente cuando necesitamos realizar búsquedas sobre un conjunto de datos.
    Funcionan haciendo uso de funciones hash.
  • ¿Quéesunafunción hash?
    ¿ ?
    Hash es una función que permite generar claves casi unívocas para un documento, fichero, variable, etc.
    Se usan en lastablashashparadiscernir en queposicióndebemosguardar un valor a partir de su clave.
    El uso de estasfuncionespermitecrearestructuras de accesodirecto, esdecir, con unacomplejidad de acceso O(1).
  • Funcionamiento de unatabla hash
    Las tablas hash se implementansobrevectoresunidimensionales.
    En estosvectores, se almacenaprincipalmente el objetoquedeseamosguardar.
    La posicióndondeguardarlovieneindicadaporunafunción de mapeo, la cualtransforma el hash de la clave en unaposición del vector.
  • Gestionandoerrores: Claves duplicadas
    Se puededar el caso de quenuestrafunción hash genere el mismo hash para dos claves distintas.
    En estassituaciones el objeto del vector apunta al nuevoobjeto, creandounalista.
    Si introducimos un cuartoelemento en el ejemplo anterior y usamoscomo clave “1”, el vector quedaríaasí:
    Cuartoobjeto
  • Implementación de Java
    Hashtable
  • Capacidad y factor de carga
    La principal característica de la tabla hash de Java esqueconsta de unacapacidady de un factor de carga.
    La capacidadestablece el tamañoinicial del vector de objetos.
    El factor de carga, númerocomprendido entre 0.0 y 1.0, especifica el grado de eficiencia de la tabla. Valoresgrandesharán un mejoruso de la memoria, mientrasque los valorespequeñosusaránmásesterecurso e incrementarán la eficienciaal reducir el número de colisiones.
    Si el número de elementossupera el producto de estas dos variables, la tablaaumentarásucapacidad.
  • Función hash en Java
    El métodoencargado de obtener el hash de las claves en la implementación de Java se llama hashCode().
    Al haceruso de templates, la implementacióndepende del tipo de clave que se estéusando (Integer, String, etc.).
    Estodota a la tabla hash de una mayor flexibilidad, yaquesiqueremosusarnuestraspropiasclasescomo claves de la tabla, solo necesitaremosdefinirdichafunción.
    En el caso de que la clave no conste de dichafunción se utilizará la de su padre (generalmente la de Object).
  • Hashtable
    public synchronized V put(K key, V value) {
    if(key != null && value != null) {
    inthash = key.hashCode();
    intindex = (hash & 0x7FFFFFFF) % elementData.length;
    Entry<K, V> entry = elementData[index];
    while(entry != null && !entry.equalsKey(key, hash)) {
    entry = entry.next;
    }
    if(entry == null) {
    modCount++;
    if(++elementCount > threshold) {
    rehash();
    index = (hash & 0x7FFFFFFF) % elementData.length;
    }
    if(index < firstSlot) {
    firstSlot= index;
    }
    if(index > lastSlot) {
    lastSlot= index;
    }
    entry = newEntry(key, value, hash);
    entry.next= elementData[index];
    elementData[index] = entry;
    return null;
    }
    V result = entry.value;
    entry.value= value;
    return result;
    }
    throw new NullPointerException();
    }
    Método put(K key, V value)
  • Rehash: Función de dispersión
    Unavez el vector quecontiene los objetoscrece, esnecesariovolver a recolocarlosyaquesuposición en el vector vienedeterminadapor la propiacapacidad de este.
    La función rehash entra en acciónunavez se ha excedido el producto de capacidad y factor de carga.
    Su cometido en la implementación de Java implicaincrementar el tamaño del vector y recolocar los objetos.
  • Hashtable
    protected void rehash() {
    intlength = (elementData.length << 1) + 1;
    if(length == 0) {
    length = 1;
    }
    intnewFirst = length;
    intnewLast = -1;
    Entry<K, V>[] newData = newElementArray(length);
    for(int i = lastSlot + 1; --i >= firstSlot;) {
    Entry<K, V> entry = elementData[i];
    while(entry != null) {
    intindex = (entry.getKeyHash() & 0x7FFFFFFF) % length;
    if(index < newFirst) {
    newFirst= index;
    }
    if(index > newLast) {
    newLast= index;
    }
    Entry<K, V> next = entry.next;
    entry.next= newData[index];
    newData[index] = entry;
    entry = next;
    }
    }
    firstSlot= newFirst;
    lastSlot= newLast;
    elementData= newData;
    computeMaxSize();
    }
    Método rehash()
  • Referencias
    Wikipedia: http://en.wikipedia.org/wiki/Hash_table
    Hashtable collisions: http://www.javaworld.com/javaworld/javaqa/2002-06/01-qa-0621-hashtable.html