Algoritmos > Tabla Hash

by academiax

JavaScript

class HashTable {
  constructor(size) {
    this.size = size; // Tamaño de la tabla hash
    this.table = new Array(size); // Crear un array para almacenar los elementos
  }

  hash(key) {
    let hash = 0;
    for (let i = 0; i < key.length; i++) {
      hash += key.charCodeAt(i); // Sumar los códigos ASCII de los caracteres de la clave
    }
    return hash % this.size; // Tomar el módulo del tamaño para obtener el índice
  }

  insert(key, value) {
    const index = this.hash(key); // Calcular el índice usando la función hash
    if (!this.table[index]) {
      this.table[index] = []; // Crear una lista en el índice si no existe
    }
    this.table[index].push({ key, value }); // Agregar el elemento a la lista en el índice
  }

  search(key) {
    const index = this.hash(key); // Calcular el índice usando la función hash
    if (this.table[index]) {
      for (let i = 0; i < this.table[index].length; i++) {
        if (this.table[index][i].key === key) {
          return this.table[index][i].value; // Devolver el valor si se encuentra la clave
        }
      }
    }
    return undefined; // Devolver undefined si no se encuentra la clave
  }

  remove(key) {
    const index = this.hash(key); // Calcular el índice usando la función hash
    if (this.table[index]) {
      for (let i = 0; i < this.table[index].length; i++) {
        if (this.table[index][i].key === key) {
          this.table[index].splice(i, 1); // Eliminar el elemento de la lista en el índice
          return;
        }
      }
    }
  }
}

// Ejemplo de uso
const myHashTable = new HashTable(10); // Crear una nueva tabla hash con tamaño 10
myHashTable.insert("apple", "red"); // Insertar "apple" con valor "red"
myHashTable.insert("banana", "yellow"); // Insertar "banana" con valor "yellow"
myHashTable.insert("grape", "purple"); // Insertar "grape" con valor "purple"

console.log(myHashTable.search("apple")); // Buscar "apple" y devolver su valor...