'before' 和 'after' 变量在调用 LinkedHashMap 的 put() 方法后如何更新?
How 'before' and 'after' variables gets updated after call of put() method of LinkedHashMap?
LinkedHashMap
扩展 HashMap
。方法 put()
不存在于 LinkedHashMap.java
代码中。所以我认为,如果我可以在下面的程序中调用put()
方法,那么它必须继承HashMap
的put()
方法。
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' 和 'before' 引用以保留插入顺序:http://a.disquscdn.com/uploads/mediaembed/images/3751/7481/original.jpg
但是 HashMap
中的 put()
方法不知道这些变量。那么如何调用put()
维护这些变量呢?
我在 HashMap
或 LinkedHashMap
代码中也找不到 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
操作(例如 put
和 remove
调用(间接)回调方法,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()
覆盖为 return LinkedHashMap.Entry
的实例,其中包含 before
和 after
引用。
编辑:
看到您的 Keys
class,您似乎忘记了覆盖 equals
,这意味着您可以向 LinkedHashMap
.
添加重复键
LinkedHashMap
扩展 HashMap
。方法 put()
不存在于 LinkedHashMap.java
代码中。所以我认为,如果我可以在下面的程序中调用put()
方法,那么它必须继承HashMap
的put()
方法。
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' 和 'before' 引用以保留插入顺序:http://a.disquscdn.com/uploads/mediaembed/images/3751/7481/original.jpg
但是 HashMap
中的 put()
方法不知道这些变量。那么如何调用put()
维护这些变量呢?
我在 HashMap
或 LinkedHashMap
代码中也找不到 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
操作(例如 put
和 remove
调用(间接)回调方法,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()
覆盖为 return LinkedHashMap.Entry
的实例,其中包含 before
和 after
引用。
编辑:
看到您的 Keys
class,您似乎忘记了覆盖 equals
,这意味着您可以向 LinkedHashMap
.