【发布时间】:2014-01-17 22:40:34
【问题描述】:
1。 我了解不同的哈希映射机制以及处理键冲突的方式(开放寻址 - 线性/二次探测、链接、可扩展哈希等。HashSet/HashMap 使用哪一个?
2。 我意识到一个好的 HashMap 依赖于一个好的散列函数。 Java 的 HashSet/HashMap 如何对对象进行哈希处理?我知道有一个哈希函数,但到目前为止,对于字符串,我不需要实现它。如果我现在想对我创建的 Java 对象进行哈希处理,我需要实现哈希函数吗?还是 Java 有创建哈希码的内置方法?
我知道不能依赖默认实现,因为它基于非恒定的内存地址散列函数。
【问题讨论】:
-
“我知道不能依赖默认实现,因为它基于非恒定的内存地址散列函数。”实际上,我今天看到了一个较早的问题,涉及到这一点。我认为它所说的是在默认实现中,它将使用对象在首次调用
hashCode时所具有的内存地址,并缓存必要的位以供以后使用(这样如果内存位置已更改) -
java 中的所有对象都有一个内置的 hashCode 方法。 docs.oracle.com/javase/7/docs/api/java/lang/…
-
是的,我们开始:stackoverflow.com/a/20249790/1476062 涉及
hashCode以及它如何与移动的对象混合。 -
另外,我之前的评论有误导性,它没有直接使用内存地址。
-
这一切都可以通过谷歌搜索轻松回答。你会得到很多指向 SO 问题的点击,然后总是有 GrepCode 来查看源代码。