HashMap 是无序的,线程不安全,数据结构是数组+链表,由key的hashCode 算出的hash值,决定把Map.Entry 存储到数组的哪一个index 里,数组存储的是链表的头,相同hash值,数据加在链表里;
LinkedHashMap 是HashMap的子类,线程不安全,数据结构是数组+单链表+双链表,有使Lru算法,先进先出,访问一个值,会把这个值放到双向链的最后。
public static void main(String[] args) { LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>(16, 0.75f, true); linkedHashMap.put("111", "111"); linkedHashMap.put("222", "222"); linkedHashMap.put("333", "333"); linkedHashMap.put("444", "444"); loopLinkedHashMap(linkedHashMap); linkedHashMap.get("111"); loopLinkedHashMap(linkedHashMap); linkedHashMap.put("222", "2222"); loopLinkedHashMap(linkedHashMap); } public static void loopLinkedHashMap(LinkedHashMap<String, String> linkedHashMap) { Set<Map.Entry<String, String>> set = inkedHashMap.entrySet(); Iterator<Map.Entry<String, String>> iterator = set.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next() + "\t"); } System.out.println(); }
运行结果:
111=111 222=222 333=333 444=444 222=222 333=333 444=444 111=111 333=333 444=444 111=111 222=2222