java中HashMap的遍历

来源:互联网 发布:国产psp4000淘宝 编辑:程序博客网 时间:2024/06/15 09:00

【遍历方法一】

[java] view plaincopy
  1. for(Map.Entry<key_type , value_type> entry : hashmap.entrySet()){  
  2.    System.out.println("Key="+entry.getKey()+"---->value="+entry.getValue().toString())  
  3. }  

for each map.entrySet()


【遍历方法二:用keySet遍历】

[c-sharp] view plaincopy
  1. Iterator it=hashmap.keySet().iterator();//这是取得键对象   
  2. while(it.hasNext())   
  3. {   
  4.    System.out.println( "it.Next数据的值是: "+get(it.next()));   //获得键所对应的值。   
  5. }  

for each map.keySet(),再调用get获取


【遍历方法三:用entrySet遍历】

[java] view plaincopy
  1. Iterator i = hasmap.entrySet().iterator();  
  2. while(i.hasNext()){  
  3.     Entry  entry=(Entry)it.next();  
  4.     Object key=entry.getKey();  
  5.     Object value=entry.getValue();  
  6. }  

      使用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("");
0 0