在Java中Hashtable
实现中使用了哪种散列方法?
答案 0 :(得分:6)
在Java中,Object
类定义了方法int hashCode()
。每个类都以不同方式实现,或者根本不实现。默认实现是调用System.identityHashCode(this)
。
Hashtable
使用hashCode()
返回的值,但会根据表格大小截断它。
顺便说一句,Hashtable
已经过时了。如果您想使用它,则应使用HashMap
或ConcurrentHashMap
代替。
答案 1 :(得分:3)
@Bart是正确的,但我想向您展示如何从Hashtable
的源代码中发现这一点。来源可用here。搜索hash(
,您会发现此功能:
119 public int getKeyHash() {
120 return key.hashCode();
121 }
如果我们看几行,我们发现key
是Object
:
89 private static class Entry<K, V> extends MapEntry<K, V> {
90 Entry<K, V> next;
然后我们查看一个随机类,例如String
,并发现它有一个hashCode()
方法。然后,我们还会查看Object
类以找到它 还有hashCode()
方法。因此,任何对象(因为它们都继承自Object
)都有hashCode()
方法。
出于好奇,我们查看了source for Object
并找到了这个:
33 public int hashCode() {
34 return VMMemoryManager.getIdentityHashCode(this);
35 }
宾果!