【发布时间】:2018-10-13 20:51:54
【问题描述】:
已经使用 Java 一段时间了,但又遇到了另一个问题。 HashMap 或 HashTable。
已经了解了基础知识..哈希表是如何实现的..就像计算哈希值..在哈希值(或者可能是哈希值 % maxArray)索引处存储数据..线性探测和链接冲突。 现在更进一步,如果有人可以在下面提供帮助:
基本示例展示了将“Jhon”、“Lisa”、“Sam”等字符串存储在数组中,然后通过冲突并将数组转换为链接列表以存储名称,这一切都很好理解并且非常好。
- 但是哈希表存储键值对。那么它是如何实现的呢?
- 键、值对示例显示“电话目录”示例,但未显示它们如何存储在数组或链表中。它只是 Map.put(k,v) 和 Map.get(k)。链表存储“一个数据”和“指针”.. 那么我们如何在链表中存储键和值(图片可能有助于理解)
- 比 map.put("Rocket", 01111111111) 更实用的哈希表示例。
【问题讨论】:
-
感谢您的链接!因此,如果我理解正确..我们传递的所有 Key、Value 对象都将传递给 Entry/Node 类对象,该对象作为单个元素存储在链表中。该对象的属性是我们的键、值,所有进一步的操作都在这些属性上执行。此外,如果我们实现哈希映射,那么是否必须重写 obj.equals() 函数,因为是开发人员决定 2 个对象如何相等?还是java默认检查对象的每个属性是否相等?谢谢!!
-
是的,在 java 中
HashMap使用Entry存储键和值的对象。开发人员必须重写hashCode()和equals()才能将其自定义类的对象用作HashMap中的键。
标签: java hashmap hashtable associative-array