Map遍历 Map<K,V> 一次存储一对
HashMap 存储的数据是没有顺序的,键或值可以为nullHashtable和HashMap的区别
- Hashtable里面的方法几乎都是同步的,线程安全,HashMap则没有,但效率高。(同ArrAyList和Vector)
- Hashtable不允许存放null值(键和值都不可以),而HashMap可以
使用了二叉权的数据结构,key是有序,保存其唯一性用到了hashCode()、equals()以及比较器(唯一性判断,键排序同TreeSet *
相同点
- 存放元素无序
key必须唯一
get(Object key); //获取给定key对应的值。
put(Object key,Object value); //该方法会将原先Key所对应的键值对覆盖掉,即可以用该方法修改Map中的值。
containsKey(Object Key); //是否包含某个元素。通过配合get和put方法一起使用,来实现匹配并修改Map中的元素。
HashMap TreeMap
map遍历
迭代 Map 中的元素不存在直接了当的方法。如果要查询某个 Map 以了解其哪些元素满足特定查询,或如果要迭代其所有元素(无论原因如何),则您首先需要获取该 Map 的“视图”。有三种可能的视图(参见表 3 )
所有键值对 — 参见 entrySet()
所有键 — 参见 keySet()
有值 — 参见 values()
方法一 在for-each循环中使用entries来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
1. Map<Integer, Integer> map = new HashMap<Integer, Integer>();
2.
3. for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
4.
5. System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
6.
7. }
8. 注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
1. Map<Integer, Integer> map = new HashMap<Integer, Integer>();
2.
3. //遍历map中的键
4.
5. for (Integer key : map.keySet()) {
6.
7. System.out.println("Key = " + key);
8.
9. }
10.
11. //遍历map中的值
12.
13. for (Integer value : map.values()) {
14.
15. System.out.println("Value = " + value);
16.
17. }
18. 该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
19. 方法三使用Iterator遍历
20. 使用泛型:
21. Map<Integer, Integer> map = new HashMap<Integer, Integer>();
22.
23. Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
24.
25. while (entries.hasNext()) {
26.
27. Map.Entry<Integer, Integer> entry = entries.next();
28.
29. System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
30.
31. }
32. Map map = new HashMap();
33.
34. Iterator entries = map.entrySet().iterator();
35.
36. while (entries.hasNext()) {
37.
38. Map.Entry entry = (Map.Entry) entries.next();
39.
40. Integer key = (Integer)entry.getKey();
41.
42. Integer value = (Integer)entry.getValue();
43.
44. System.out.println("Key = " + key + ", Value = " + value);
45.
46. }