【遍历方法一】
- for(Map.Entry<key_type , value_type> entry : hashmap.entrySet()){
- System.out.println("Key="+entry.getKey()+"---->value="+entry.getValue().toString())
- }
for each map.entrySet()
【遍历方法二:用keySet遍历】
- Iterator it=hashmap.keySet().iterator();//这是取得键对象
- while(it.hasNext())
- {
- System.out.println( "it.Next数据的值是: "+get(it.next())); //获得键所对应的值。
- }
for each map.keySet(),再调用get获取
【遍历方法三:用entrySet遍历】
- Iterator i = hasmap.entrySet().iterator();
- while(i.hasNext()){
- Entry entry=(Entry)it.next();
- Object key=entry.getKey();
- Object value=entry.getValue();
- }
使用HashMap的匿名内部类Entry遍历比使用keySet()效率要高很多,使用forEach循环时要注意不要在循环的过程中改变键值对的任何一方的值,否则出现哈希表的值没有随着键值的改变而改变,到时候在删除的时候会出现问题。
此外,entrySet比keySet快些。对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entrySet只是遍历了第一次,他把key和value都放到了entry中,所以就快了。
a. HashMap的循环,如果既需要key也需要value,直接用
即可,foreach简洁易懂。
b. 如果只是遍历key而无需value的话,可以直接用
// JDK1.4中
// 遍历方法一 hashmap entrySet() 遍历
System.out.println("方法一");
Iterator it = tempMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println("key=" + key + " value=" + value);
}
System.out.println("");
// JDK1.5中,应用新特性For-Each循环
// 遍历方法二
System.out.println("方法二");
for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
System.out.println("key=" + key + " value=" + value);
}
System.out.println("");
// 遍历方法三 hashmap keySet() 遍历
System.out.println("方法三");
for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) {
Object obj = i.next();
System.out.println(obj);// 循环输出key
System.out.println("key=" + obj + " value=" + tempMap.get(obj));
}
for (Iterator i = tempMap.values().iterator(); i.hasNext();) {
Object obj = i.next();
System.out.println(obj);// 循环输出value
}
System.out.println("");