第112页 | 算法技术手册 | 阅读 ‧ 电子书库

同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库

解决方案

基于散列搜素算法有两个部分。第一个是创建散列表。例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。

请支持我们,让我们可以支付服务器费用。
使用微信支付打赏


上一页 · 目录下一页


下载 · 书页 · 阅读 ‧ 电子书库