Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。注 意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中。)
此实现可以让客户避免未指定的、由 HashMap(及 Hashtable)所提供的通常为杂乱无章的排序工作,同时无需增加与 TreeMap 相关的成本。使用它可以生成一个与原来顺序相同的映射副本,而与原映射的实现无关:
- package collection;
- 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) {
-
-
-
-
- testMap(new HashMap());
-
- testMap(new LinkedHashMap());
-
-
-
- }
- public static void testMap(Map map) {
- for (int i = 98; i <= 102; i++) {
- map.put(i, i);
- }
- showMap(map);
-
- map.put(100, 100);
- showMap(map);
-
- map.remove(100);
- map.put(100, 100);
- showMap(map);
- }
- public static void showMap(Map map) {
-
- Iterator it = map.keySet().iterator();
- Object key;
- while (it.hasNext()) {
- key = it.next();
- System.out.print(key + "=>" + map.get(key) + "; ");
- }
- System.out.println();
- }
- }
运行效果:
102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
102=>102; 100=>100; 101=>101; 98=>98; 99=>99;
98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
98=>98; 99=>99; 100=>100; 101=>101; 102=>102;
98=>98; 99=>99; 101=>101; 102=>102; 100=>100;