首页 » 算法技术手册 » 算法技术手册全文在线阅读

《算法技术手册》解决方案

关灯直达底部

基于散列搜素算法有两个部分。第一个是创建散列表。例5-7的代码表明了如何使用链表来存储元素。我们使用迭代器来从集合C中获取元素然后输入。

例5-7:加载散列表

注意表A是如何由桶组成的,每一个链表的类型都是LinkedList<V>[1]。同样我们也要注意表是如何在链表中存储集合C中的元素的,而不是仅仅存储指针。

在表中查找元素是极为平常的。例5-8的代码做的就是这个工作。一旦散列函数返回散列表的索引,我们需要看看相应的桶是否为空。如果为空,返回空,表示查找的字符串不在集合中,否则我们在相应的桶中遍历链表来查找字符串。

例5-8:查找元素

注意散列函数确保散列索引是在[0,tableSize)范围内的。如果在String类上使用hashCode函数,散列函数必须考虑到hashCode内整数计算可能会溢出并且返回负数。这个是必须要处理的,因为如果值是负数的话,那么取模运算也会返回负数[2],例如,在String类上使用JDK的hashCode函数,字符串"aaaaaa"返回值为-1 425 372 064。

[1]<v>是HashTable中的类型参数,此处表示可以存放任何类型元素。 [2]在Java中,表达式-5%3=-2。