【问题标题】:Java HashMap implementation has 'next' member in Entry class. What's the use of itJava HashMap 实现在 Entry 类中有“下一个”成员。它有什么用
【发布时间】:2012-12-11 19:01:22
【问题描述】:

Java HashMap 实现在 Entry 私有类中有“下一个”成员。因为,键的新值将覆盖旧值,Entry 类中“下一个”成员的用途是什么。

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;

        /**
         * Creates new entry.
         */
        Entry(int h, K k, V v, Entry<K,V> n) {
            value = v;
            next = n;
            key = k;
            hash = h;
        }
   .....

}

【问题讨论】:

    标签: java hashmap


    【解决方案1】:

    next 指向同一个桶中的下一个条目。

    每个存储桶中可以有多个条目——一个存储桶包含所有哈希码等于某些 i mod 2^n 的条目(对于某些 n),而不仅仅是一个特定的键。

    【讨论】:

    • ...因为每个bucket都是用链表实现的
    • 谢谢..我知道这是一个链表实现..但是我们如何从地图中获取所有值。我们只得到同一个键的最后插入的一个。
    • 每个键只有一个值。旧值不会留在地图中;那将毫无意义。但是您可以使用HashMap.values() 获取值的集合(显然,每个键一个值)。
    • 这就是我的观点。当您只能获取一个键的一个值时,为什么我们要引用旧值。我们不能直接丢弃它吗?
    • 您没有对旧值的引用。 next 指的是完全不同的键的条目,该键恰好具有相同的哈希码 mod 哈希表的大小。
    【解决方案2】:

    如果多个项目散列到同一个存储桶,则存储桶需要能够包含所有项目,因此在许多实现中它将成为某种集合,如列表。

    【讨论】:

      【解决方案3】:

      它用于将条目链接在一起。

      【讨论】:

        猜你喜欢
        • 2013-10-25
        • 2014-11-05
        • 2012-03-10
        • 2017-01-12
        • 1970-01-01
        • 2012-11-07
        • 2013-03-11
        • 1970-01-01
        • 2016-02-05
        相关资源
        最近更新 更多