`

LinkedHashMap测试

    博客分类:
  • java
阅读更多

 

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

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

 

修改过的测试代码:

 

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

public class Lession14LinkedHashMap {

	public static void main(String[] args) {
	  // 分别使用2个类,进行相同的数据测试
	  // 可以看到,HashMap的顺序是不可预测的
	  // 而LinkedHashMap的顺序严格按照插入顺序


	  // 102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
	  testMap(new HashMap());
	  // 98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
	  testMap(new LinkedHashMap());
	  
	  // 删除数据后,LinkedHashMap会将数据放到末尾最后的位置
	  // 而HashMap可能会使用前一个空缺的位置
	}


	public static void testMap(Map map) {
	  for (int i = 98; i <= 102; i++) {
	    map.put(i, i);
	  }
	  showMap(map);
	  // 尝试重复插入数据
	  System.out.println("----------- 尝试重复插入数据 --------------");
	  map.put(100, 100);
	  showMap(map);
	  showMapValues(map);


	  // 删除数据,并再次插入
	  System.out.println("----------- 删除数据,并再次插入 --------------");
	  map.remove(100);
	  map.put(100, 100);
	  showMap(map);
	  showMapValues(map);
	  
	  // 删除数据
	  System.out.println("----------- 删除数据 --------------");
	  map.remove(100);
	  showMap(map);
	  showMapValues(map);
	  
	  // 调用containsKey
	  System.out.println("----------- 调用containsKey --------------");
	  map.containsKey(98);
	  showMap(map);
	  showMapValues(map);
	}


	private static void showMapValues(Map map) {
		System.out.println("showMapValues:"+map.values());
	}


	public static void showMap(Map map) {
	  // 迭代Key的操作
	  Iterator it = map.keySet().iterator();
	  Object key;
	  while (it.hasNext()) {
	    key = it.next();
	    System.out.print(key + "=>" + map.get(key) + "; ");
	  }
	  System.out.println();
	}
	
}

 

来源:http://blog.csdn.net/java2000_net/archive/2009/01/09/3741565.aspx

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics