要遍历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)