Hashtable使用的哈希值?

时间:2010-12-28 13:08:58

标签: java hash hashtable

在Java中Hashtable实现中使用了哪种散列方法?

2 个答案:

答案 0 :(得分:6)

在Java中,Object类定义了方法int hashCode()。每个类都以不同方式实现,或者根本不实现。默认实现是调用System.identityHashCode(this)

Hashtable使用hashCode()返回的值,但会根据表格大小截断它。

顺便说一句,Hashtable已经过时了。如果您想使用它,则应使用HashMapConcurrentHashMap代替。

答案 1 :(得分:3)

@Bart是正确的,但我想向您展示如何从Hashtable的源代码中发现这一点。来源可用here。搜索hash(,您会发现此功能:

119           public int getKeyHash() {
120               return key.hashCode();
121           }

如果我们看几行,我们发现keyObject

 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     }

宾果!