对于家庭作业,我必须用C ++或Java实现各种哈希函数。我很习惯使用Java,但没有使用它的哈希功能。
我想要一个链接碰撞键的哈希结构。像这样:
这里LinkedHashMap是正确的选择吗?是HashMap吗?要么?为什么呢?
答案 0 :(得分:2)
好吧,只是一个常规的HashMap
链接条目最终在同一个存储桶中(每个存储桶实际上是链接列表数组中的一个元素)。 LinkedHashMap
还维护条目之间的链接以保留插入顺序,但这不是图表中发生的情况。
答案 1 :(得分:1)
HashMap就是这样做的。 LinkedHashMap的作用是按插入顺序链接键。
答案 2 :(得分:1)
我认为标准HashMap
已经以这种方式工作:它有多个bin,并且具有冲突哈希码的元素最终在同一个bin中。您可以自己查找HashMap
的源代码:在JDK安装目录中,有一个包含源代码的文件src.zip
。
LinkedHashMap
只是一个HashMap
与List
相结合,可以跟踪地图中元素的插入顺序。其名称中的“链接”一词与存储一个箱子中的元素的方式没有任何关系。
答案 3 :(得分:0)
您可以使用HashMap
Map<String,ArrayList<Object>> map = new HashMap<String,ArrayList<Object>>();
而不是对象指定您需要的类型。
HashMap
授予快速随机访问权限。
还有:
TreeMap
- 按键排序的数据。
LinkedHashMap
- 按顺序存储的数据输入容器。
答案 4 :(得分:0)
LinkedHashMap用于创建具有可预测的键顺序的可迭代映射。在内部,HashHap可以自由使用它认为适合处理键冲突的任何方式,这可能是也可能不是链接名单。我认为没有任何标准的保证,碰撞桶的底层机制在Java中使用链表,但在实践中它们可能。