HaahTable 再Hash

来源:互联网 发布:excel 重复数据统计 编辑:程序博客网 时间:2024/06/05 12:38
<span style="font-size:24px;">package com.liebao33;public class DataItem {private int iData;public DataItem(int ii){iData = ii;}public int getKey(){return iData;}}</span>
<pre name="code" class="java"><span style="font-size:24px;">package com.liebao33;public class HashTable {private DataItem[] hashArray;private int arraySize;private DataItem nonItem;public HashTable(int size){arraySize = size;hashArray = new DataItem[arraySize];nonItem = new DataItem(-1);}public void displayTable(){System.out.print("Table: ");for(int j=0;j<arraySize;j++){if(null!=hashArray[j]){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){//stepsize=constant-(key%constant)//constant is 质数,less than arraySizereturn 5-(key%5);//>0}public void insert(int key,DataItem item){int hashVal = hashFunc1(key);//first hashint stepSize = hashFunc2(key);//again hashwhile(hashArray[hashVal]!=null && hashArray[hashVal].getKey()!=-1){hashVal+=stepSize;hashVal %= arraySize;}hashArray[hashVal] = item;}public DataItem delete(int key){int hashVal = hashFunc1(key);//first hashint stepSize = hashFunc2(key);//again hashwhile(hashArray[hashVal]!=null){if(hashArray[hashVal].getKey()==key){DataItem tmp = hashArray[hashVal];hashArray[hashVal] = nonItem;return tmp;}hashVal+=stepSize;hashVal%=arraySize;}return null;}public DataItem find(int key){int hashVal = hashFunc1(key);//first hashint stepSize = hashFunc2(key);//again hashwhile(hashArray[hashVal]!=null){if(hashArray[hashVal].getKey()==key){return hashArray[hashVal];}hashVal+=stepSize;hashVal%=arraySize;}return null;}}</span>


测试:

<span style="font-size:24px;">package com.liebao33;import java.io.*;public class DoubleApp {public static void main(String[] args) throws Exception{DataItem item ;int key,size,n;System.out.print("Enter size of hash table: ");size = getInt();System.out.print("Enter initial number of item: ");n = getInt();HashTable table = new HashTable(size);for(int i=0;i<n;i++){key = (int)(Math.random()*2*size);item = new DataItem(key);table.insert(key,item);}while(true){System.out.println("Enter first letter of show,insert,delete,find:");char choice = getChar();switch (choice) {case 's':table.displayTable();break;case 'i':System.out.print("Enter key value to insert :");key = getInt();item = new DataItem(key);table.insert(key,item);break;case 'd':System.out.print("Enter key value to delete :");key = getInt();table.delete(key);break;case 'f':System.out.print("Enter key value to find :");key = getInt();item = table.find(key);if(item!=null){System.out.println("Find: "+key);}else{System.out.println("Could not find: "+key);}break;default:System.out.print("Invalid entry\n");}}}public static String getString() throws Exception{InputStreamReader isr = new InputStreamReader(System.in);BufferedReader br = new BufferedReader(isr);return br.readLine();}public static char getChar() throws Exception{return getString().charAt(0);}public static int getInt() throws Exception{return Integer.parseInt(getString());}}</span>


0 0
原创粉丝点击