1. 程式人生 > >java版資料結構與演算法—線性探測雜湊表

java版資料結構與演算法—線性探測雜湊表

package com.zoujc.hash;

/**
 *雜湊表:  優點:速度快(插入和查詢)
 *          缺點:基於陣列,不能有序遍歷
 * 鍵值對:通過鍵訪問值
 * 衝突:不同的關鍵字經過雜湊化得到的陣列下標出現了重複
 * 解決衝突:1.開放地址法(線性探測    二次探測    再雜湊法)
 *           2.鏈地址法
 */
public class DataItem {
    private int iData;
    public DataItem(int data){
        iData = data;
    }
    public
int getKey(){ return iData; } } 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 i=0;i<arraySize;i++){ if(hashArray[i] != null){ System.out.print(hashArray[i].getKey() + " "); }else { System.out.print("** "); } } System.out.
println(); } //雜湊化函式 public int hashFunc(int key){ return key%arraySize; } public void insert(DataItem item){ int key = item.getKey(); int hashVal = hashFunc(key);//把得到的值雜湊化 while (hashArray[hashVal] != null && hashArray[hashVal].getKey() != -1){ //位置被佔用向下找 hashVal ++; hashVal = hashVal%arraySize; //是否是最後一個位置,是的話往下走 } hashArray[hashVal] = item; } public DataItem delete(int key) { int hashVal = hashFunc(key); while (hashArray[hashVal] != null){ if(hashArray[hashVal].getKey() == key){ //找到要刪除的資料 DataItem temp = hashArray[hashVal]; hashArray[hashVal] = nonItem; return temp; } hashVal ++; hashVal = hashVal%arraySize;//超出陣列最大範圍 } return null;//沒有找到 } public DataItem find(int key) { int hashVal = hashFunc(key); while(hashArray[hashVal] != null){ if(hashArray[hashVal].getKey() == key){ return hashArray[hashVal]; } hashVal ++; hashVal = hashVal%arraySize; } return null; } } class HashApp{ public static void main(String[] args){ HashTable hashTable = new HashTable(15); DataItem dataItem = new DataItem(120); hashTable.insert(dataItem); DataItem dataItem1 = new DataItem(30); hashTable.insert(dataItem1); DataItem dataItem2 = new DataItem(11); hashTable.insert(dataItem2); DataItem dataItem3 = new DataItem(15); hashTable.insert(dataItem3); hashTable.displayTable(); hashTable.delete(15); hashTable.displayTable(); hashTable.find(11); if(hashTable != null){ System.out.println("找到了"); }else { System.out.println("沒找到"); } } }

在這裡插入圖片描述