昨天写代码的时候遇到一个问题:
有如下Map,Map<String,List<String>>
对某个字符串,判断在map的哪个字符串list里,然后返回对应的key
首先想到是对map进行遍历,然后就懵了,从没有遍历过Map
后来上网查了一下,并查阅java的API,作出如下整理
查阅API得知Map提供了如下两个方法
Set<K> keySet()
返回此映射中包含的键的Set视图
Set<Map.Entry<K, V>> entrySet()
返回此映射中包含的映射关系的Set视图
对Map的遍历就着落在这两个方法上面了
先建一个Map然后对其进行遍历
1 | Map<String, String> map = new HashMap<String, String>(); |
第一种遍历方法,也是最自然的想法,如果可以得到所有的键值的数组或者list,对键值遍历,这个时候就可以通过键的值,调用get(Object
key)方法获得对应的值了,代码如下
1 | public void traversalMap(Map<String, String> map){ |
输出结果:
key: key3, value: value3
key: key2, value: value2
key: key1, value: value1
然而这样似乎有些繁琐,既然通过Set
1 | public void traversalMap(Map<String, String> map){ |
结果一样,输出所有键值对,这是对set直接用for进行遍历
当然也可以用Iterator进行遍历,如下
1 | public void traversalMap(Map<String, String> map){ |
下面是通过Set<Map.Entry<K, V>> entrySet() 方法完成对map的遍历
1 | public void traversalMap(Map<String, String> map){ |
这里entrySet() 得到一个Set<Map.Entry<K, V>> 类型的set,然后通过Iterator对此set进行遍历
当然也可以直接采用for进行遍历
1 | public void traversalMap3(Map<String, String> map){ |
和上面是类似的。
对于Map的遍历,大概就整理这些