Thursday, 18 October 2012

demonstrate Hash

/* Program to demonstrate 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 = 163;
    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;
}
}


/*
Output :
Table: ** ** ** ** ** ** ** ** 108 ** ** ** ** ** 114 115 16 ** ** ** ** ** 22 *
* ** ** 122 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 42 ** ** ** ** ** ** **
 ** ** 152 ** ** 155 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 73 ** **
 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
Found 100
*/




No comments:

Post a Comment