1.基本原理:LinkedHashMap继承了HashMap,put get方法原理与HashMap基本相同,不了解HashMap实现原理的可以先去看看我上一篇文章,HashMap源码分析,HashMap在put一个元素调用newNode方法,LinkedHashMap覆盖了这个方法,在内存中维护了一个链表,所以LinkedHashMap是有插入顺序的,覆盖的时候调用afterNodeAccess方法,删除的时候调用afterNodeRemoval方法
2.V put(K key, V value)源码分析
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node<K,V>[] tab; Node<K,V> p; int n, i;
if ((tab = table) == null || (n = tab.length) == 0)
n = (tab = resize()).length;
if ((p = tab[i = (n - 1) & hash]) == null)
tab[i] = newNode(hash, key, value, null);
else {
Node<K,V> e; K k;
if (p.hash == hash &