JAVA提高教程(11)-认识Map

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.

时间: 2024-11-01 04:04:06

JAVA提高教程(11)-认识Map的相关文章

JAVA提高教程(14)-认识Map之LinkedHashMap

Java基础及提高教程目录 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序).注意,如果在映射中重新插入 键,则插入顺序不受影响.(如果在调用 m.put(k, v) 前 m.containsKey(k) 返回了 true,则调用时会将键 k 重新插入到映射 m 中.) 此实现可以让客户避免未指定的.由 HashMap(及

JAVA提高教程(13)-认识Map之Hashtable

这个类,在使用上和HashMap的区别不大,其方法都是同步的(Synchronized). 1.package collection.lession13; 2. 3.import java.util.Hashtable; 4. 5./** 6. * 老紫竹JAVA提高教程(13)-认识Map之Hashtable<br> 7. * 这个类继承自一个已经过期不推荐使用的Dictionary类<br> 8. * 目前均推荐实现Map接口<br> 9. * 10. * 11.

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

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. * 一个映射不能包含重复的键:

JAVA提高教程(10)-认识List列表之Stack

不多说,我们直接看源代码 1.package collection.lession10; 2. 3.import java.util.Arrays; 4.import java.util.List; 5.import java.util.Stack; 6. 7./** 8. * 老紫竹JAVA提高教程(10)-认识List列表之Stack<br> 9. * 实现了LIFO的对象堆栈,<br> 10. * 类本身继承自Vector,扩展了一些方法<br> 11. * &l

JAVA提高教程(9)-认识List列表之LinkedList

LinkedList提供了将链接列表用作堆栈.队列或双端队列的方法,这里不再重复介绍 List的标准操作,只给出其独特方法的使用. 请注意其已经实现的接口 Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E> 1.package collection.lession9; 2. 3.import java.util.Arrays; 4.imp

JAVA提高教程(8)-认识List列表之Vector

Vector和ArrayList的最大区别就是Vector的主要集合方法是线程同步的. 1.package collection.lession8; 2. 3.import java.util.Arrays; 4.import java.util.Collection; 5.import java.util.Enumeration; 6.import java.util.Iterator; 7.import java.util.List; 8.import java.util.Vector; 9

JAVA提高教程(7)-认识List列表之ArrayList

ArrayList是List里面使用率最高的. package collection.lession7; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; /** * 老紫竹JAVA提高教程(7)-认识List列表之ArrayList<br> * * @author 老紫竹 JAVA

JAVA提高教程(6)-认识List列表

列表是很常用的数据结构,感觉比Map和Set用的频率要高一些吧,因为我经常用其返 回数据库的操作结果集 package collection.lession6; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Stack; import

JAVA提高教程(5)-认识Set集合之EnumSet

这个类是1.5开始有的,目前个人使用量几乎为零,因为我很少使用枚举,呵呵.我这 里也是简单介绍一下而已.其使用方式和普通的Set没有区别,只是构造方法有一些特殊 的而已. 1.package collection.lession5; 2. 3.import java.util.Arrays; 4.import java.util.EnumSet; 5.import java.util.Set; 6. 7./** 8. * 老紫竹JAVA提高教程(5)-认识Set集合之EnumSet.<br>