程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA提高教程(12)-認識Map之HashMap

JAVA提高教程(12)-認識Map之HashMap

編輯:關於JAVA

Map裡面使用率最多的,應該是HashMap吧,我們先來看看這個

1.package collection.lession12;
2.
3.import java.util.HashMap;
4.import java.util.Iterator;
5.import java.util.Map;
6.
7./**
8. * 老紫竹JAVA提高教程(12)-認識Map之HashMap<br>
9. * 基於哈希表的 Map 接口的實現。<br>
10. * 一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。<br>
11. * <br>
12. * 相關API請查看 api.java2000.net/Map
13. *
14. * @author 老紫竹 JAVA世紀網(java2000.net)
15. */
16.public class Lession12 {
17.
18. public static void main(String[] args) {
19. // 我們用String做所有的測試
20. HashMap<String, String> map = new HashMap<String, String>();
21.
22. // 允許null作為Key.
23. // 看看源代碼實現就知道了
24. // if (key == null)
25. // return putForNullKey(value);
26. map.put(null, "測試null的鍵");
27. showMap(map); // null=>測試null的鍵;
28.
29. // 當然也允許null的Value了
30. map.put("測試null的值", null);
31. showMap(map); // null=>測試null的鍵; 測試null的值=>null;
32.
33. // 對應的都是null
34. // 注意這個null替換了前面的"Null Key"字符串的value了
35. // 也就是後面的相同的key會替換以前的key對應的value
36. // 返回值為以前的值
37. System.out.println("以前的值=" + map.put(null, null)); // 以前的值=測試null的鍵
38. showMap(map); // null=>null; 測試null的值=>null;
39.
40. // 其它的和Map相同的操作就不介紹了
41. // 這裡介紹一下Hash的特殊的地方
42. // 大家使用時一定要注意,其實和HashSet有相同的地方
43. // 那就是通過Key的Hashcode進行查找
44.
45. Map<MyObject, String> map2 = new HashMap<MyObject, String>();
46. MyObject key1 = new MyObject("第一個對象");
47. MyObject key2 = new MyObject("第二個對象");
48. MyObject key3 = new MyObject("第三個對象");
49. map2.put(key1, "111111");
50. map2.put(key2, "222222");
51.
52. // 我們來測試讀取第一個
53. System.out.println(map2.get(key1)); // 111111
54.
55. // 我們嘗試修改key1的name
56. key1.setName("第一個對象-修改");
57.
58. // 我們再次測試讀取第一個
59. // 沒有找到哦!
60. System.out.println(map2.get(key1)); // null
61.
62. // 總結
63. // HashSet一定要注意hashCode的問題
64. // 對於String等不可修改類無所謂
65. // 但對於普通類,一定要注意其hashCode的實現方式
66. // 千萬不要讓一個類的hashCode隨便變動
67. // 如果非得更新,應該先刪除,後修改
68. map2.remove(key2);
69. key2.setName("第二個對象-修改");
70. map2.put(key2, "2222222---");
71. showMap(map2); // 第二個對象-修改=>2222222---; 第一個對象-修改=>null;
72.
73. // 對Value則沒有這個限制
74. }
75.
76. public static void showMap(Map map) {
77. // 迭代Key的操作
78. Iterator it = map.keySet().iterator();
79. Object key;
80. while (it.hasNext()) {
81. key = it.next();
82. System.out.print(key + "=>" + map.get(key) + "; ");
83. }
84. System.out.println();
85. }
86.}
87.
88.class MyObject {
89.
90. private String name;
91.
92. public String getName() {
93. return name;
94. }
95.
96. public void setName(String name) {
97. this.name = name;
98. }
99.
100. MyObject(String name) {
101. this.name = name;
102. }
103.
104. // 注意這裡使用name的hashCode作為類的hashCode
105. public int hashCode() {
106. return name.hashCode();
107. }
108.
109. public String toString() {
110. return name;
111. }
112.}

運行結果(已經包含在源代碼裡)

null=>測試null的鍵;

null=>測試null的鍵; 測試null的值=>null;

以前的值=測試null的鍵

null=>null; 測試null的值=>null;

111111

null

第二個對象-修改=>2222222---; 第一個對象-修改=>null;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved