下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:课课家教育     来源: http://www.kokojia.com点击数:797发布时间: 2016-02-03 13:55:48

标签: java课程标准21天学通javajava学习课程

大神带你学编程,欢迎选课

  Map里面使用率最多的,应该是HashMap吧,我们先来看看这个

JAVA程序员提高教程(12)-认识Map之HashMap_java课程标准_21天学通java_课课家

  1.package collection.lession12;

  2.

  3.import java.util.HashMap;

  4.import java.util.Iterator;

  5.import java.util.Map;

  6.

  7./**

  9. * 基于哈希表的 Map 接口的实现。

  10. * 一个映射不能包含重复的键;每个键最多只能映射到一个值。

  11. *

  13. *

  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;

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程