public class LinkHash implements IMapper { private static int SIZE = 100000; private class Node{ String key; int value; Node next; public Node(String key, int value){ this.key = key; this.value = value; this.next = null; } } private Node[] myTable; private int mySize; public LinkHash(){ myTable = new Node[SIZE]; } private int getHash(String key){ return Math.abs(key.hashCode()) % SIZE; } private Node getNode(String key){ int bucketIndex = getHash(key); Node node = myTable[bucketIndex]; while (node != null){ if (node.key.equals(key)) return node; node = node.next; } return null; } public boolean containsKey(String key) { return getNode(key) != null; } public int get(String key) { return getNode(key).value; } public void printAll() { for(int k=0; k < myTable.length; k++){ if (myTable[k] != null){ Node list = myTable[k]; while (list != null){ System.out.printf("%s\t%d\n", list.key, list.value); list = list.next; } } } } public void put(String key, int value) { int bucketIndex = getHash(key); Node node = myTable[bucketIndex]; while (node != null){ if (node.key.equals(key)) { node.value = value; return; } node = node.next; } node = new Node(key,value); node.next = myTable[bucketIndex]; myTable[bucketIndex] = node; mySize++; } public int size() { return mySize; } }