For-Each循环是Java5新引入的,遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。
1. 遍历key(比entrySet迭代快一点点)
这个方法比entrySet迭代具有轻微的性能优势(大约快10%)
for(Integer key: map.keySet()){
System.out.println(key);
}
2. 遍历value(比entrySet迭代快一点点)
这个方法比entrySet迭代具有轻微的性能优势(大约快10%)
for(Integer value : map.values()){
System.out.println(value);
}
3. 同时遍历key和value
可以用以下几种方式。
3.1 用entrySet() + foreach (用!)
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
System.out.println(entry.getKey()+" " +entry.getValue());
}
3.2 用entrySet() + 迭代器 (使劲用!)
相当于获得键值对集合entry,并遍历
//返回的是entry<Integer,Integer>类型的迭代器
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
//返回时没声明it的类型,it.next()需要强转
// Iterator it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<Integer, Integer> entry = it.next();
System.out.println(entry.getKey() + " " +entry.getValue());
}
3.3 keySet + foreach (耗时,不推荐)
keySet拿到key,get一下就可以在同一个for循环内拿到value
这个方法看上去更简洁,但是实际上它更慢更低效,通过key得到value值更耗时。
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println(key+ " " +value);
}
3.4 用keySet+ 迭代器(耗时,不推荐)
获得键集合,并遍历,拿到key,通过key去get值。
这个方法看上去更简洁,但是实际上它更慢更低效,通过key得到value值更耗时。
//返回时声明了it是Integet类型的迭代器,不用强转
//Iterator<Integer> it = map.keySet().iterator();
//返回时没声明it的类型,it.next()需要强转
Iterator it = map.keySet().iterator();
while(it.hasNext()){
// Integer key = it.next();
Integer key = (Integer)it.next();
Integer value = map.get(key);
System.out.println(key + "" + value);
}