Java遍歷map的五種方式


使用For-Each迭代entries

這是最常見的方法,並在大多數情況下更可取的。當你在循環中需要使用Map的鍵和值時,就可以使用這個方法

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
    System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
}

注意:For-Each循環是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍歷的map是null的話,For-Each循環會拋出NullPointerException異常,所以在遍歷之前你應該判斷是否為空引用。

使用For-Each迭代keys和values

如果你只需要用到map的keys或values時,你可以遍歷KeySet或者values代替entrySet

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

//iterating over keys only
for (Integer key : map.keySet()) {
    System.out.println("Key = " + key);
}

//iterating over values only
for (Integer value : map.values()) {
    System.out.println("Value = " + value);
}

這個方法比entrySet迭代具有輕微的性能優勢(大約快10%)並且代碼更簡潔。

使用Iterator迭代

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> 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();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry entry = (Map.Entry) entries.next();
    Integer key = (Integer)entry.getKey();
    Integer value = (Integer)entry.getValue();
    System.out.println("Key = " + key + ", Value = " + value);
}

迭代keys並搜索values

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
    Integer value = map.get(key);
    System.out.println("Key = " + key + ", Value = " + value);
}

這五種方法都有其自己所適用的情況,大部分情況我都會喜歡使用迭代器來完成map的遍歷,你呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM