forEach和replaceAll方法跳过
abstract class LinkedHashIterator {
这个是内部类LinkedHashIterator 起的是迭代器的作用
LinkedHashMap.Entry<K,V> next;
这个是下一个节点属性
LinkedHashMap.Entry<K,V> current;
这个是当前节点
int expectedModCount;
这个是期待的修改次数
LinkedHashIterator() {
next = head;
expectedModCount = modCount;
current = null;
}
这个是构造方法 先把next设为head 把两个修改次数统一 current置空
public final boolean hasNext() {
return next != null;
}
这个是判断是否有下一个元素的方法
final LinkedHashMap.Entry<K,V> nextNode() {
LinkedHashMap.Entry<K,V> e = next;
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
if (e == null)
throw new NoSuchElementException();
current = e;
next = e.after;
return e;
}
这个是遍历下一个节点 先判断两个修改次数是否统一 不统一抛异常 判断下一个元素是否为空 如果为空就抛异常 然后将current和next后移 最后返回next节点
public final void remove() {
Node<K,V> p = current;
if (p == null)
throw new IllegalStateException();
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
current = null;
K key = p.key;
removeNode(hash(key), key, null, false, false);
expectedModCount = modCount;
}
}
这个是删除节点的方法 先判断current是否为空 如果为空就抛出异常 然后判断两个修改次数是否一致 不一致就抛出异常 然后将current置空 删除current的键所属的节点 然后将两个修改次数统一
final class LinkedKeyIterator extends LinkedHashIterator
implements Iterator<K> {
public final K next() { return nextNode().getKey(); }
}
final class LinkedValueIterator extends LinkedHashIterator
implements Iterator<V> {
public final V next() { return nextNode().value; }
}
final class LinkedEntryIterator extends LinkedHashIterator
implements Iterator<Map.Entry<K,V>> {
public final Map.Entry<K,V> next() { return nextNode(); }
}
这三个迭代器子类分别为键 值 键值对的迭代器 就是next方法返回键、值、键值对
LinkedHashMap至此讲解完毕