快速业务通道

JAVA提高教程(12)-认识Map之HashMap - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

JAVA提高教程(12)-认识Map之HashMap

时间:2011-04-07 csdn 老紫竹

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;

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号