1.遍历例子
import java.util.LinkedHashMap;
import java.util.Iterator;
import java.util.Map;
public class LinkedHashMapTraversalExample {
public static void main(String[] args) {
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("A", 1);
linkedHashMap.put("B", 2);
linkedHashMap.put("C", 3);
// 获取LinkedHashMap的迭代器
Iterator<Map.Entry<String, Integer>> iterator =
linkedHashMap.entrySet().iterator();
// 遍历LinkedHashMap
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}
2.遍历相关源码
2.1.entrySet
获取全局变量entrySet,如果为null,创建LinkedEntrySet
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{
public Set<Map.Entry<K,V>> entrySet() {
Set<Map.Entry<K,V>> es;
return (es = entrySet) == null ? (entrySet = new LinkedEntrySet()) : es;
}
}
2.2.iterator
创建LinkedEntryIterator
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{
final class LinkedEntrySet extends AbstractSet<Map.Entry<K,V>> {
public final Iterator<Map.Entry<K,V>> iterator() {
return new LinkedEntryIterator();
}
}
}
2.3.hasNext
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> {
abstract class LinkedHashIterator {
LinkedHashMapEntry<K,V> next;
LinkedHashIterator() {
next = head; //一开始next被赋值head
expectedModCount = modCount;
current = null;
}
public final boolean hasNext() {
return next != null;
}
}
}
2.4.next
从head开始遍历
public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{
abstract class LinkedHashIterator {
final LinkedHashMapEntry<K,V> nextNode() {
LinkedHashMapEntry<K,V> e = next;
if (modCount != expectedModCount){
throw new ConcurrentModificationException();
}
if (e == null){
throw new NoSuchElementException();
}
current = e;
next = e.after; //更新next
return e; //返回本次的next
}
}
final class LinkedEntryIterator extends LinkedHashIterator
implements Iterator<Map.Entry<K,V>> {
public final Map.Entry<K,V> next() {
return nextNode();
}
}
}