import java.util.ArrayList;
class HashTable
{
int size = 7;
Node[] dataMap;
class Node
{
String key;
int value;
Node next;
Node(String key,int value)
{
this.key = key;
this.value = value;
}
}
HashTable()
{
dataMap = new Node[size];
}
public void printTable()
{
for(int i=0;i<dataMap.length;i++)
{
System.out.println(i+":");
Node temp = dataMap[i];
while(temp!=null)
{
System.out.println("{"+temp.key+"="+temp.value+"}");
temp=temp.next;
}
}
}
public int Hash(String key)
{
int hash=0;
char[] keyChars = key.toCharArray();
for(int i=0;i<keyChars.length;i++)
{
int ascii = keyChars[i];
hash = (hash+ascii*23)%dataMap.length;
}
return hash;
}
public void set(String key,int value)
{
int index = Hash(key);
Node newNode = new Node(key,value);
if(dataMap[index]==null)
{
dataMap[index]=newNode;
}
else
{
Node temp = dataMap[index];
while(temp.next!=null)
{
temp=temp.next;
}
temp.next = newNode;
}
}
public int get(String key)
{
int index = Hash(key);
Node temp = dataMap[index];
while(temp!=null)
{
if(key==temp.key)
{
return temp.value;
}
temp=temp.next;
}
return 0;
}
public ArrayList keys()
{
ArrayList<String> allKeys = new ArrayList<>();
for(int i=0;i<dataMap.length;i++)
{
Node temp = dataMap[i];
while(temp!=null)
{
allKeys.add(temp.key);
temp=temp.next;
}
}
return allKeys;
}
}
class Main {
public static void main(String[] args) {
HashTable myHashTable = new HashTable();
myHashTable.set("nails",100);
myHashTable.set("tile",50);
myHashTable.set("lumber",80);
myHashTable.set("bolts",200);
myHashTable.set("screws",140);
System.out.println(myHashTable.keys());
// System.out.println(myHashTable.get("screws"));
myHashTable.printTable();
}
}