概述
HashMap
HashMap存储元素是无序的,在通过Iterator遍历元素时也是无序的。
LinkedHashMap
LinkedHashMap存储元素是无序的,在通过Iterator遍历元素时是有序的;put数据的顺序和输出顺序是一致的。
LinkedHashMap遍历元素的有序性,是采用了双向链表来保存节点。
HashMap源码分析
HashMap数据存储结构
// 主结构 -- 数组
// java.util.HashMap#table
transient Node<K,V>[] table;
// 元素结构之Node
// java.util.HashMap.Node
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
}
// 元素升级结构之TreeNode(红黑树)
// java.util.HashMap.TreeNode
static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {
TreeNode<K,V> parent; // red-black tree links
TreeNode<K,V> left;
TreeNode<K,V> right;
TreeNode<K,V> prev; // needed to unlink next upon deletion
boolean red;
}
Iterator
HashMap<String, String> hashMap = new HashMap<>();
for (int i = 0; i < 6; i++) {
hashMap.put("k-" + i, "v-" + i);
}
// 获取Iterator实例
Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
Map.Entry<String, String> entry = null;
while (iterator.hasNext()) {
entry = iterator.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
java.util.HashMap#entrySet
public Set<Map.Entry<K,V>> entrySet() {
Set<Map