哈希表是一种数据结构,它可以提供快速的插入和查找操作。不论哈希表有多少数据,插入和删除(有时包括删除)只需要接近常量的时间,即O(1)的时间级。
哈希表运算非常快,在计算机程序中,如果需要在一秒钟内查找上千条记录,通常使用哈希表,哈希表的速度明显是树快。
哈希表也有一些缺点:它是基于数组的,数组创建后难于扩展。某些哈希表基本被填满时,性能下降非常严重,所以程序员必须要清楚表中将要存储多少数据。并且,也没有一种简便的方法可以以任何一种顺序遍历表中的数据项,如果需要这种能力,就只能选择其他数据结构。如果需要这种能力,就需要选择其他数据结构。然而,如果不需要有序遍历数据,并且可以提前预测数据量的大小,那么哈希表在速度和易用性方面是无与伦比的。
——————————————————————————————————————
开放地址法–方法1–线性探测
在线性探测中,线性的查找空白单元。如果5421是要插入数据的位置,它已经被占用了,那么就使用5422,然后是5423,依次类推,数组下标一直递增,直到找到空位,这就叫做线性探测,因为它沿着数组下标一步一步顺序的查找空白单元。
package com.hash;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class DataItem
{
private int iData;
//...................
public DataItem(int ii)
{
iData = ii;
}
//.............
public int getKey()
{
return iData;
}
}
class HashTable
{
private DataItem[] hashArray;
private int arraySize;
private DataItem nonItem; //for deleted items
//.....................
public HashTable(int size)
{
arraySize = size;
hashArray =new DataItem[arraySize];
nonItem = new DataItem(-1); //deleted item key is -1
}
//................
public