• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Hashtable
 

Hashtable

on

  • 2,242 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,242
Views on SlideShare
2,193
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