在调用 LinkedHashMap 的 put() 方法后,"之前"和"之后"变量如何更新?



LinkedHashMap扩展了HashMap。方法LinkedHashMap.java代码中不存在put()。所以我认为,如果我可以在下面的程序中调用put()方法,那么它必须继承HashMapput()方法。

import java.util.*;
class First
{
        public static void main(String[] args)
        {
                LinkedHashMap<Key, String> h=new LinkedHashMap<>(7);
                h.put(new Key(3), "Hi");
                h.put(new Key(1), "Hello");
                h.put(new Key(9), "hru");
                System.out.println(h);
        }
}

Key.java是:

class Key
{
        int i = 0;
        Key(int i)
        {
                this.i=i;
        }
        public int hashCode()
        {
                return i;
        }
        public String toString()
        {
                return i+"";
        }
}

必须维护"after"one_answers"before"引用以保持插入顺序:http://a.disquscdn.com/uploads/mediaembed/images/3751/7481/original.jpg

但是HashMap中的put()方法不知道这些变量。那么如何调用put()来维护这些变量呢?

我也无法在HashMapLinkedHashMap代码中找到createEntry()方法。

我正在使用:

java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

HashMap操作(间接)调用putremove的回调方法,LinkedHashMap覆盖:

// Callbacks to allow LinkedHashMap post-actions
void afterNodeAccess(Node<K,V> p) { }
void afterNodeInsertion(boolean evict) { }
void afterNodeRemoval(Node<K,V> p) { }

这允许LinkedHashMap维护一个双链表,而HashMap对此一无所知。

除了这些方法,LinkedHashMap覆盖newNode()返回LinkedHashMap.Entry的实例,其中包含beforeafter引用。

编辑:

看到你的Keys类,似乎你忘记覆盖equals,这意味着你可以添加重复的密钥到你的LinkedHashMap

最新更新