JAVA集合学习(一)认识Map之LinkedHashMap

Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注 意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中。)

此实现可以让客户避免未指定的、由 HashMap(及 Hashtable)所提供的通常为杂乱无章的排序工作,同时无需增加与 TreeMap 相关的成本。使用它可以生成一个与原来顺序相同的映射副本,而与原映射的实现无关:

 

package com.sg.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;

public class TestLinkedHashMap {
	// 分别使用2个类,进行相同的数据测试
    // 可以看到,HashMap的顺序是不可预测的
    // 而LinkedHashMap的顺序严格按照插入顺序
	public static void main(String[] args) {
		testMap(new HashMap());
		testMap(new LinkedHashMap());
	}
	
	
	public static void testMap(Map map){
		for(int i = 98; i <= 102; i++){
			map.put(i, i);
		}
		if (map instanceof HashMap) {
			System.out.println("HashMap最初始的值是》:"+map);
		}
		if (map instanceof LinkedHashMap) {
			System.out.println("LinkedHashMap最初始的值是》:"+map);
		}
		
		showMap(map);
		
		//尝试重复插入数据
		map.put(100, 100);
		showMap(map);
		
		System.out.println("删除前size:"+map.size());
		map.remove(100);
		System.out.println("删除后size:"+map.size());
		map.put(100, 100);
		showMap(map);
	}
	
	public static void showMap(Map map){
		Iterator iterator = map.keySet().iterator();
		Object key ;
		while(iterator.hasNext()){
			key = iterator.next();
			System.out.print("key:"+key+"-->"+"value:"+map.get(key)+" ");
		}
		System.out.println();
	}
}

 

运行效果如下:


JAVA集合学习(一)认识Map之LinkedHashMap_第1张图片
 

你可能感兴趣的:(LinkedHashMap)