1. 程式人生 > >java 遍歷Map 的五種方法

java 遍歷Map 的五種方法

遍歷Map的方法, 我總結了5種, CoreJava中給出的是第一種使用forEach+lambda表示式, 我認為這種方法應該是最好的, 但是隻能在Java8之後的版本使用;

建議優先使用第一種和第四種(類似第二種);

遍歷Map:

第一種可以使用Map的forEach方法加上Java8的lambda表示式:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

第二種可以使用Map.Entry來遍歷Map的條目:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

第三種可以使用for結合Map的keySet和values方法來遍歷:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

第四種是使用迭代器, 這種是看起來比較熟悉而且效率挺高的, 但是要注意, 不能在使用for迴圈訪問迭代器的同時使用remove操作, javadoc說這樣會發生不可預期的錯誤, 如果希望迭代的同時刪除元素, 可以使用while來遍歷:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

當然還有第五種是在遍歷keySet的時候呼叫get方法獲取對應的值, 但是這種方法太撈了, 效率很低, 不提了, 就上一段測試程式碼吧:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

測試程式碼如下:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

輸出如下:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

貼一些map和sortedmap的常用方法:

Java遍歷Map的五種方法(Java8中新lambda方法)

 

Java遍歷Map的五種方法(Java8中新lambda方法)

/**
 * lejun.chen
 */
package com.chen.Controller;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

/**
 * @author lejun.chen
 * @Time SystemTime
 */
public class mapTest {

    
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("國家", "中國");
        map.put("魔都", "上海");
        map.put("寒冷", "北極");
        map.put("美女", "成都");
        map.put("發展", "武漢");
        map.put("美女多的", "重慶");
        
        //JAVA8


         System.out.println("<------1----------------------------------------->");
        /*map.forEach((K,V){
            System.out.println(K+"--------"+V);
         });
        */
          System.out.println("<------2----------------------------------------->");
        //1.老方法
        for (String a : map.keySet()) {
            System.out.println(a);
        }
        for (String b : map.values()) {
            System.out.println(b);
        }
     System.out.println("<------3----------------------------------------->");
        //第二種使用Map.Entry來遍歷Map的條目
    for (Map.Entry<String, String> it :map.entrySet()) {
        System.out.println(it.getKey()+"-----"+it.getValue());
    }
    System.out.println("<----4------------------------------------------->");
        //迭代器遍歷
    for (Iterator<Map.Entry<String, String>> it=map.entrySet().iterator();it.hasNext();) {
        Map.Entry<String, String> itt=it.next();
        System.out.println(itt.getKey()+"-------"+itt.getValue());
    }
    System.out.println("<----5------------------------------------------->");
     for (String a:map.keySet()) {
        System.out.println(a+"------"+map.get(a));
         
         
    }
    }
    
}