Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Hash table with double hashing

import java.io.IOException; public class HashTableWithDoubleHashing {   private DataItem[] hashArray;    private int arraySize;   private DataItem bufItem; // for deleted items   HashTableWithDoubleHashing(int size) {     arraySize = size;     hashArray = new DataItem[arraySize];     bufItem = new DataItem(-1);   }   public void displayTable() {     System.out.print("Table: ");     for (int j = 0; j < arraySize; j++) {       if (hashArray[j] != null)         System.out.print(hashArray[j].getKey() + " ");       else         System.out.print("** ");     }     System.out.println("");   }   public int hashFunc1(int key) {     return key % arraySize;   }   public int hashFunc2(int key) {     return 6 - key % 6;   }   public void insert(int key, DataItem item) {     int hashVal = hashFunc1(key); // hash the key     int stepSize = hashFunc2(key); // get step size     // until empty cell or -1     while (hashArray[hashVal] != null && hashArray[hashVal].getKey() != -1) {       hashVal += stepSize; // add the step       hashVal %= arraySize; // for wraparound     }     hashArray[hashVal] = item; // insert item   }   public DataItem delete(int key) {     int hashVal = hashFunc1(key);      int stepSize = hashFunc2(key); // get step size     while (hashArray[hashVal] != null) {       if (hashArray[hashVal].getKey() == key) {         DataItem temp = hashArray[hashVal]; // save item         hashArray[hashVal] = bufItem; // delete item         return temp; // return item       }       hashVal += stepSize; // add the step       hashVal %= arraySize; // for wraparound     }     return null; // can't find item   }   public DataItem find(int key) {     int hashVal = hashFunc1(key); // hash the key     int stepSize = hashFunc2(key); // get step size     while (hashArray[hashVal] != null) {       if (hashArray[hashVal].getKey() == key)         return hashArray[hashVal]; // yes, return item       hashVal += stepSize; // add the step       hashVal %= arraySize; // for wraparound     }     return null; // can't find item   }   public static void main(String[] args) throws IOException {     int aKey;     DataItem aDataItem;     int size, initSize;     size = 100;     initSize = 10;     HashTableWithDoubleHashing theHashTable = new HashTableWithDoubleHashing(         size);     for (int i = 0; i < initSize; i++) {       aKey = (int) (java.lang.Math.random() * 2 * size);       aDataItem = new DataItem(aKey);       theHashTable.insert(aKey, aDataItem);     }     theHashTable.displayTable();     aKey = 100;     aDataItem = new DataItem(aKey);     theHashTable.insert(aKey, aDataItem);     aKey = 100;     theHashTable.delete(aKey);     aKey = 100;     aDataItem = theHashTable.find(aKey);     if (aDataItem != null)       System.out.println("Found " + aKey);     else       System.out.println("Could not find " + aKey);   } } class DataItem {   private int data;   public DataItem(int i) {     data = i;   }   public int getKey() {     return data;   } }