我认为 JVM 之间的实现可能不同,但据我了解,使用了链表(但不是必需的 java.util.LinkedList)。这就是我使用的 JVM 中的 HashTable 中“put”的实现方式:
public Object put(Object key, Object value) {
// Make sure the value is not null
if (value == null) throw new NullPointerException();
// Makes sure the key is not already in the hashtable.
HashtableEntry e;
HashtableEntry tab[] = table;
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
for (e = tab[index] ; e != null ; e = e.next) {
if ((e.hash == hash) && e.key.equals(key)) {
Object old = e.value;
e.value = value;
return old;
}
}
此版本与您发布的版本之间存在一些差异,但我认为它们背后的逻辑是相同的。HashtableEntry 如下所示:
class HashtableEntry {
int hash;
Object key;
Object value;
HashtableEntry next;
(...)
“HashtableEntry next”引用确实使 HashtableEntry 成为链表(链表是一种结构,其中每个元素都引用另一个相同类型的元素,除非它是列表中的最后一个元素)。我认为您正在寻找的是 java.util.LinkedList 但 HastTable 以自己的方式实现链表结构。