Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Hash table with linear probing

import java.io.IOException; public class HashTable {   private DataItem[] hashArray;    private int arraySize;   private DataItem bufItem; // for deleted items   public HashTable(int size) {     arraySize = size;     hashArray = new DataItem[arraySize];     bufItem = new DataItem(-1); // deleted item key is -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 hashFunction(int key) {     return key % arraySize;    }   public void insert(DataItem item){     int key = item.getKey();      int hashVal = hashFunction(key); // hash the key     // until empty cell or -1,     while (hashArray[hashVal] != null && hashArray[hashVal].getKey() != -1) {       ++hashVal; // go to next cell       hashVal %= arraySize; // wraparound if necessary     }     hashArray[hashVal] = item; // insert item   }   public DataItem delete(int key) {     int hashVal = hashFunction(key);      while (hashArray[hashVal] != null) // until empty cell,     {        if (hashArray[hashVal].getKey() == key) {         DataItem temp = hashArray[hashVal]; // save item         hashArray[hashVal] = bufItem; // delete item         return temp;       }       ++hashVal; // go to next cell       hashVal %= arraySize; // wraparound if necessary     }     return null; // can't find item   }   public DataItem find(int key) // find item with key   {     int hashVal = hashFunction(key); // hash the key     while (hashArray[hashVal] != null) // until empty cell,     {        if (hashArray[hashVal].getKey() == key)         return hashArray[hashVal]; // found, return item       ++hashVal; // go to next cell       hashVal %= arraySize; // wraparound if necessary     }     return null; // can't find item   }   public static void main(String[] args) throws IOException {     DataItem aDataItem;     int aKey, size, initSize, keysPerCell;     size = 150;     initSize = 100;     keysPerCell = 10;     HashTable theHashTable = new HashTable(size);     for (int j = 0; j < initSize; j++){       aKey = (int) (java.lang.Math.random() * keysPerCell * size);       aDataItem = new DataItem(aKey);       theHashTable.insert(aDataItem);     }     theHashTable.displayTable();     aDataItem = new DataItem(100);     theHashTable.insert(aDataItem);     theHashTable.delete(100);     aDataItem = theHashTable.find(100);     if (aDataItem != null) {       System.out.println("Found " + 100);     } else       System.out.println("Could not find " + 100);   } } class DataItem {    private int data;    public DataItem(int d) {     data = d;   }   public int getKey() {     return data;   } }