running sample
https://stackblitz.com/edit/typescript-2zlayw
code=>
//hash node
class HashNode<T,U>
{
key:T
value:U
constructor(_key:T,_value:U)
{
if(typeof _key==="object")
throw new Error("object as key not allowed")
this.key=_key;
this.value=_value;
}
//get key
public getKey()
{
return this.key;
}
//get value
public getValue()
{
return this.value;
}
}
//hash table
class HashTable<T,U>
{
static TABLE_SIZE = 128;
private table=[];
//HashTable
constructor()
{
for(let i=0;i<HashTable.TABLE_SIZE;i++)
{
this.table[i]=undefined
}
}
//getHashIndex
private getHashIndex(_key:T)
{
let hashIndex=0;
if(typeof _key==="number")
{
hashIndex=_key%HashTable.TABLE_SIZE;
}else
{
let hash=0
for(let i=0;i<_key.length;i++)
{
hash+=_key[i].charCodeAt();
}
hashIndex=hash%HashTable.TABLE_SIZE;
}
return hashIndex;
}
//Put
public Put(_key:T,_value:U)
{
let hashIndex=this.getHashIndex(_key);
while(this.table[hashIndex]!==undefined && this.table[hashIndex].getKey()!==_key)
{
hashIndex=(hashIndex+1)%HashTable.TABLE_SIZE;
}
this.table[hashIndex]=new HashNode<T,U>(_key,_value);
}
//get
public Get(_key:T):any
{
let hashIndex=this.getHashIndex(_key);
while(this.table[hashIndex]!==undefined && this.table[hashIndex].getKey()!=_key)
{
hashIndex=(hashIndex+1)%HashTable.TABLE_SIZE;
if(this.table[hashIndex]===undefined)
return -1;
}
return this.table[hashIndex].getValue();
}
}
//create a hashtable number as a key
let hashtable=new HashTable<number,string>();
hashtable.Put(1,"apple");
hashtable.Put(2,"mango");
hashtable.Put(3,"banana");
hashtable.Put(7,"cheek");
console.log(hashtable.Get(7));
//create another hashtable string as key
let hashtable1=new HashTable<string,string>();
hashtable1.Put("face1","daragon");
hashtable1.Put("face2","appldaragon");
hashtable1.Put("face3","daragon22323");
hashtable1.Put("face2","manumanu");
console.log(hashtable1.Get("face2"))
Comments
Post a Comment