Map可以為某些數據提供快速查找功能,通過關鍵字(key)可以快速的得到對應的 Value,而不用像List那樣需要大范圍的遍歷或特別的算法。
1. 源代碼
1.import java.util.ArrayList;
2.import java.util.HashMap;
3.import java.util.HashSet;
4.import java.util.Iterator;
5.import java.util.List;
6.import java.util.Map;
7.import java.util.Set;
8.import java.util.Map.Entry;
9.
10./**
11. * 老紫竹JAVA提高教程(11)-認識Map<br>
12. * 將鍵映射到值的對象。<br>
13. * 一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。<br>
14. * <br>
15. * 相關API請查看 api.java2000.net/Map
16. *
17. * @author 老紫竹 JAVA世紀網(java2000.net)
18. */19.public class Lession {
20. public static void main(String[] args) {
21. // 構造一個Map
22. // 我們使用HashMap進行測試
23. Map map = new HashMap();
24.
25. // 查看map是否為空26. System.out.println(map.isEmpty()); // true
27.
28. // 存入數據
29. // put方法會返回原來的值
30. // 如果是第一次賦值,則返回null;
31. System.out.println(map.put("id", "123")); // null
32. map.put("name", "xyz");
33.
34. // 再次查看map是否為空
35. System.out.println(map.isEmpty()); // false
36.
37. // 查看有多少數據了
38. System.out.println("size=" + map.size()); // size=2
39.
40. // 查看所有的數據
41. showMap(map); // id=>123; name=>xyz;
42.
43. // 獲取數據
44. System.out.println("name=" + map.get("name")); // name=xyz
45.
46. // 放入不同key類型的數據
47. map.put(new Integer(1), new Object());
48. // 放入集合類型
49. Set set = new HashSet();
50. set.add(111);
51. set.add(222);
52. List list = new ArrayList();
53. list.add(333);
54. list.add(444);
55. map.put(set, list);
56. // 甚至放入Map類型
57. Map m = new HashMap();
58. m.put("mm", "mmmm");
59. map.put(m, "map in map");
60.
61. // id=>123; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz;
62. // [222, 111]=>[333, 444];
63. showMap(map);
64.
65. // 我們嘗試放入重復key的數據
66. System.out.println(map.put("id", "456")); // 123
67.
68. // 可以看到,原來的數據value被覆蓋了
69. // id=>456; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz;
70. // [222, 111]=>[333, 444];
71. showMap(map);
72.
73. // 檢查是否存在我們需要的數據
74. // 查找key值
75. System.out.println(map.containsKey("name")); // true
76. // 查找Value
77. System.out.println(map.containsValue(list)); // true
78.
79. // 刪除一些數據
80. // 是根據key進行刪除的
81. System.out.println(map.remove(m)); // map in map
82. showMap(map); // id=>456; 1=>java.lang.Object@de6ced; name=>xyz; [222,
83. // 111]=>[333, 444];
84.
85. // Entry的集合
86. // 內部就是Map實現的,所以對其操作是互相影響的
87. // 不支持add操作,
88. Set<Entry> ms = map.entrySet();
89.
90. // [id=456, 1=java.lang.Object@de6ced, name=xyz, [222, 111]=[333, 444]]
91. System.out.println(ms);
92. System.out.println(ms.size() + "/" + map.size()); // 4/4
93.
94. // 嘗試通過entrySet刪除
95. Iterator<Entry> it = ms.iterator();
96. if (it.hasNext()) {
97. Entry e = it.next();
98. System.out.println(e.getKey() + "=" + e.getValue()); // id=456
99. it.remove();
100. }
101. System.out.println(ms.size() + "/" + map.size()); // 3/3
102.
103. // 清除所有數據
104. map.clear();
105. System.out.println(ms.size() + "/" + map.size()); // 0/0
106. }
107.
108. public static void showMap(Map map) {
109. // 迭代Key的操作
110. Iterator it = map.keySet().iterator();
111. Object key;
112. while (it.hasNext()) {
113. key = it.next();
114. System.out.print(key + "=>" + map.get(key) + "; ");
115. }
116. System.out.println();
117. }
118.}
119.
2 運行結果
true
null
false
size=2
id=>123; name=>xyz;
name=xyz
id=>123; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz; [222, 111]=>[333, 444];
123
id=>456; 1=>java.lang.Object@de6ced; {mm=mmmm}=>map in map; name=>xyz; [222, 111]=>[333, 444];
true
true
map in map
id=>456; 1=>java.lang.Object@de6ced; name=>xyz; [222, 111]=> [333, 444];
[id=456, 1=java.lang.Object@de6ced, name=xyz, [222, 111]=[333, 444]]
4/4
id=456
3/3
0/0
3 測試:
嘗試放入各種對象類型,並檢測和刪除它們
4 總結
map的put和get是關鍵,不同的實現Map的方式有一點差別,我們會在後面的介紹裡講 解常用的Map實現