Quick actions

cmd+k|ctrl+k

Navigation

Languages

HashTable

Snippet info

Language

JavaScript

Visibility

public

Author

ludvic

Created

2025-01-10T17:04:54.012116Z

Updated

2025-01-10T17:32:07.166209Z

class HashTable {
  constructor(size){
    this.data = new Array(size);
  }

  _hash(key) {
    let hash = 0;
    for (let i =0; i < key.length; i++){
        hash = (hash + key.charCodeAt(i) * i) % this.data.length
    }
    return hash;
  }
  
  set(key, value){
      let hash = this._hash(key)
      if(!this.data[hash]){
          this.data[hash] =[]
      }
      for(let i = 0; i<this.data[hash].length; i++){
          if(this.data[hash][i][0] === key){
              this.data[hash].pop()
          }
      }
      this.data[hash].push([key,value])
      return this.data
  }
  
  get(key){
      let hash = this._hash(key)
      if(!this.data[hash]){
          return null
      }
      for(let i = 0; i<this.data[hash].length; i++){
          if(this.data[hash][i][0] === key){
              return this.data[hash][i][1]
          }
      }
  }
  keys(){
    const currentKeys = []
    for(let i = 0; i<this.data.length; i++){
        if(this.data[i]){
            for(let j = 0; j<this.data[i].length; j++){
                currentKeys.push(this.data[i][j][0])
            }
        }
    }
    return currentKeys
  }
  values(){
    const currentKeys = []
    for(let i = 0; i<this.data.length; i++){
        if(this.data[i]){
            for(let j = 0; j<this.data[i].length; j++){
                currentKeys.push(this.data[i][j][1])
            }
        }
    }
    return currentKeys
  }
  
}

const myHashTable = new HashTable(50);
myHashTable.set('grapes', 10000)
myHashTable.set('Grapes', 200)
console.log(myHashTable._hash("Grapes"))

console.log(myHashTable.get('Grapes'))
console.log(myHashTable.set('apples', 9))
console.log(myHashTable.get('apples'))
console.log(myHashTable.keys())
console.log(myHashTable.values())
INFO