集合里面的Map

要遍历HashMap的键集,和值集,用for循环好别扭~!有哪一种可靠?一般公司里面有哪一种遍历呀?

如果你想健值一起遍历:

[code="java"]Map map = new HashMap();
for(Entry entry:map.entrySet()){
String key = entry.getKey();
String value = entry.getValue();
}[/code]

如果你想遍历健值:

[code="java"]Map map = new HashMap();
Set keySet = map.keySet();
for(String key:keySet){
String value = map.get(key);
}[/code]

如果你只想遍历值集:

[code="java"]Map map = new HashMap();
Collection values = map.values();
for (String value : values) {
System.out.println("value=" + value);
}
[/code]

while

[code="java"]
方法一
Map map = new HashMap();

for (Map.Entry entry : map.entrySet()) {

System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

方法二
Map map = new HashMap();

//遍历map中的键

for (Integer key : map.keySet()) {

System.out.println("Key = " + key);

}

//遍历map中的值

for (Integer value : map.values()) {

System.out.println("Value = " + value);

}

方法三
Map map = new HashMap();

Iterator> entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry<Integer, Integer> entry = entries.next();

System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

方法四
Map map = new HashMap();

for (Integer key : map.keySet()) {

Integer value = map.get(key);

System.out.println("Key = " + key + ", Value = " + value);

}

一般常用的entryset的比较多,一次性把key和value拿出来处理了
[/code]

楼上几位回答的都很好。我这里从另一方面说明一点:
[code="java"]
Map map = new ConcurrentHashMap();

    Iterator<Integer> iter = map.keySet().iterator();
    while(iter.hasNext()) {
        int key = iter.next();
        int value = map.get(key);
        System.out.println("key="+key +" value="+value);
    }

[/code]
通过for-each或者while都可以正确的获取map内的数据。但如果在多线程的情况下,如果一个线程更改了map内的元素,比如删除了,或者又添加了,此时在遍历的客户端就会有异常ConcurrentModification产生。
为了避免该异常可能需要客户端加锁来保证线程安全,或者使用ConcurrentHashMap来存储元素。

foreach循环(前提是map里面封装的是对象)
for(对象名:对象 maplist)