Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希表冲突在哪里使用LinkedList存储具有相同键的多个值_Java_Hashtable - Fatal编程技术网

Java 哈希表冲突在哪里使用LinkedList存储具有相同键的多个值

Java 哈希表冲突在哪里使用LinkedList存储具有相同键的多个值,java,hashtable,Java,Hashtable,我读过很多次,在哈希表中,当发生冲突时,一个键和多个值存储在linkedlist中,然后它将进行equals调用以检查哪些键映射到所需的值,但我看到哈希表的代码,它在put方法或get方法中没有任何linkedlist代码。它使用Entry[]数组,我不知道如何将其用作linkedlist for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) { if ((e.hash == hash) &&

我读过很多次,在哈希表中,当发生冲突时,一个键和多个值存储在linkedlist中,然后它将进行equals调用以检查哪些键映射到所需的值,但我看到哈希表的代码,它在put方法或get方法中没有任何linkedlist代码。它使用Entry[]数组,我不知道如何将其用作linkedlist

for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
        if ((e.hash == hash) && e.key.equals(key)) {
        V old = e.value;
        e.value = value;
        return old;
        }
    }
for(条目e=tab[index];e!=null;e=e.next){
if((e.hash==hash)和&e.key.equals(key)){
V old=e.value;
e、 价值=价值;
返老还童;
}
}

请引导并澄清我的疑问。

我认为JVM之间的实现可能有所不同,但据我所知,使用的是链表(但不是必需的java.util.LinkedList)。这就是在我使用的JVM的哈希表中实现“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以其自己的方式实现了链表结构。

如果您放置一个条目,并且键发生冲突,则该条目将被覆盖,无需使用任何LinkedList@xagyg我认为当键不相同时,更重要的是你不想因为它们散列到相同的数组索引而丢失它们。@Umesh它是在迭代LL。不是吗?通过e=e.next