哈希函数: 使用特定的哈希算法,将关键字哈希化,压缩到一个较小的范围
哈希表: 使用哈希算法, 把一个大范围的数字哈希化成一个小范围的数字。 这个小范围对应着数组的下标。 使用哈希函数向数组插入数据后, 这个数组称为哈希表
链地址法: 开放地址法中,通过在哈希表中寻找一个空位解决哈希冲突问题。另一个方法是在哈希表每个单元中设置链表。某个数据项的关键字还是像通常一样映射到哈希表的单元,而数据项本身插入到这个单元的链表中。
装填因子: 链地址法中的装填因子(数据项数和哈希表容量的比值)与开发地址法的不同。 在链地址法中,需要在有N个单元的数组中装入N个或更多的数据项;因此装填因子一般为1,或比一大。 这没问题;因为,某些位置包含的链表中包含两个或两个以上的数据项。
下面将使用链地址法 实现哈希表并解决哈希冲突问题
1. 创建一个link类
public class Link { private int iData; public Link next; public Link(int it){ this.iData = it; } public int getKey(){ return iData; } public void displayLink(){ System.err.print(iData+" "); } }
2. 创建一个SortedList类
public class SortedList { private Link first; public void SortedList(){ first = null; } public void insert(Link theLink){ int key = theLink.getKey(); Link previous =null; Link current = first; while(current !=null && key> current.getKey()){ previous = current; current = current.next;