【发布时间】:2010-12-19 09:45:35
【问题描述】:
我一直在尝试了解java.util.HashMap和java.util.HashSet的内部实现。
以下是我脑海中浮现的疑问:
-
@Override public int hashcode()在 HashMap/HashSet 中的重要性是什么?这个哈希码在内部使用在哪里? - 我通常看到 HashMap 的键是
String,如myMap<String,Object>。我可以像myMap<someObject, Object>那样将值映射到someObject(而不是字符串)吗?我需要遵守哪些合同才能成功实现这一目标?
提前致谢!
编辑:
- 我们是说键的哈希码(检查!)是哈希表中映射值的实际对象吗?而当我们
myMap.get(someKey);时,java 是在内部调用someKey.hashCode()来获取哈希表中的数字以查找结果值?
回答:是的。
编辑 2:
- 在
java.util.HashSet中,哈希表的键是从哪里生成的?是否来自我们正在添加的对象,例如。mySet.add(myObject);然后myObject.hashCode()将决定它在哈希表中的位置? (因为我们不在 HashSet 中提供键)。
答案:添加的对象成为键。该值是虚拟的!
【问题讨论】:
标签: java hashmap hashcode hashset language-implementation