package com.java.ds.bst; public class BinaryHashMap { int CAPACITY = 20; Entry elementData [] = new BinaryHashMap.Entry[CAPACITY]; int size; public void put(K k, V v) { int index = findIndex(k); System.out.println("index for key "+ index); Entry entry = elementData[index]; if (entry == null) { //first entry at index elementData[index] = new Entry(k,v); size++; } else { addEntry(entry,k,v); } } private void addEntry(Entry root, K k, V v) { Comparable compr = (Comparable) k; int compareValue = compr.compareTo(root.key); if(compareValue == 0){ root.value = v; return; } if (compareValue > 0) {// right if (root.getRight() == null) { Entry entry = new Entry(k,v); root.setRight(entry); size++; } else { addEntry(root.getRight(), k,v); } } else if (compareValue < 0) { // left if (root.getLeft() == null) { Entry entry = new Entry(k,v); root.setLeft(entry); size++; } else { addEntry(root.getLeft(), k,v); } } } private int findIndex(K k){ return k.hashCode() % CAPACITY; } public int getSize(){ return size; } private static class Entry { private K key; private V value; private Entry left; private Entry right; public Entry(K k,V v) { this.key = k; this.value = v; } public void setLeft(Entry left) { this.left = left; } public void setRight(Entry right) { this.right = right; } public Entry getLeft() { return left; } public Entry getRight() { return right; } } }