package Algorithms;
public class SeparateChainingHashST<Key,Value> {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
private int N;
private int M;
private SequentialSearchST<Key,Value>[] st;
public SeparateChainingHashST() {
this(997);
}
public SeparateChainingHashST(int M) {
this.M=M;
st=(SequentialSearchST<Key,Value>[])new SequentialSearchST[M];
for(int i=0;i<M;i++) {
st[i]=new SequentialSearchST<Key,Value>();
}
}
private int hash(Key key) {
return (key.hashCode()&0x7fffffff)%M;
}
public Value Get(Key key) {
return (Value)st[hash(key)].get(key);
}
public void Put(Key key,Value val) {
st[hash(key)].put(key,val);
}
//private class Node;
class SequentialSearchST<Key,Value>{
Node first;
private class Node{
Key key;
Value val;
Node next;
public Node(Key key,Value val,Node next) {
this.key=key;
this.val=val;
this.next=next;
}
}
public Value get(Key key) {
for(Node x=first;x!=null;x=x.next)
if(key.equals(x.key))
return x.val;
return null;
}
public void put(Key key,Value val) {
for(Node x=first;x!=null;x=x.next)
if(key.equals(x.key))
{
x.val=val;
return;
}
first=new Node(key,val,first);
}
}
}