1. 程式人生 > 實用技巧 >五種方法來遍歷Map

五種方法來遍歷Map

如何在Java中迭代任何Map

Java中通常有五種遍歷Map的方法。在本文中,我們將討論所有這些內容,並探討它們的優缺點。首先,我們不能直接使用迭代器來迭代Map,因為Map不是Collection。同樣,在繼續之前,您必須對Map.Entry <K,V>介面有所瞭解。由於Java中的所有Map都實現了Map介面,因此以下技術適用於任何Map實現(HashMap,TreeMap,LinkedHashMap,Hashtable等)。

1、使用For-Each迴圈遍歷Map.entrySet():

Map.entrySet()方法返回此Map中包含的對映的collection-view(Set <Map.Entry <K,V >>)。因此,我們可以使用Map.Entry <K,V>的getKey()和getValue()方法遍歷鍵值對。此方法是最常見的方法,如果在迴圈中同時需要對映鍵和值,則應使用此方法。下面是演示它的Java程式。

// Java program to demonstrate iteration over 
// Map.entrySet() entries using for-each loop 

import java.util.Map; 
import java.util.HashMap; 

class IterationDemo 
{ 
    public static void main(String[] arg) 
    { 
        Map<String,String> gfg = new HashMap<String,String>(); 
    
        
// enter name/url pair gfg.put("GFG", "geeksforgeeks.org"); gfg.put("Practice", "practice.geeksforgeeks.org"); gfg.put("Code", "code.geeksforgeeks.org"); gfg.put("Quiz", "quiz.geeksforgeeks.org"); // using for-each loop for iteration over Map.entrySet()
for (Map.Entry<String,String> entry : gfg.entrySet()) System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); } }
結果:
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

  2、使用keySet()和values()方法遍歷鍵或值

Map.keySet()方法返回此對映中包含的鍵的Set檢視,而Map.values()方法返回此對映中包含的值的集合檢視。因此,如果僅需要對映中的鍵或值,則可以使用for-each迴圈遍歷keySet或值。下面是演示它的Java程式。

// Java program to demonstrate iteration over 
// Map using keySet() and values() methods 

import java.util.Map; 
import java.util.HashMap; 

class IterationDemo 
{ 
    public static void main(String[] arg) 
    { 
        Map<String,String> gfg = new HashMap<String,String>(); 
    
        // enter name/url pair 
        gfg.put("GFG", "geeksforgeeks.org"); 
        gfg.put("Practice", "practice.geeksforgeeks.org"); 
        gfg.put("Code", "code.geeksforgeeks.org"); 
        gfg.put("Quiz", "quiz.geeksforgeeks.org"); 
        
        // using keySet() for iteration over keys 
        for (String name : gfg.keySet()) 
            System.out.println("key: " + name); 
        
        // using values() for iteration over keys 
        for (String url : gfg.values()) 
            System.out.println("value: " + url); 
    } 
} 
key: Quiz
key: Practice
key: GFG
key: Code
value: quiz.geeksforgeeks.org
value: practice.geeksforgeeks.org
value: geeksforgeeks.org
value: code.geeksforgeeks.org

  3、在Map.Entry <K,V>上使用迭代器進行迭代

此方法有點類似於第一個方法。在第一種方法中,我們在Map.Entry <K,V>上使用for-each迴圈,但是在這裡我們使用迭代器。在Map.Entry <K,V>上使用迭代器具有自己的優勢,即我們可以在迭代過程中通過呼叫iterator.remove()方法從地圖中刪除條目。

// Java program to demonstrate iteration over 
// Map using keySet() and values() methods 

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

class IterationDemo 
{ 
    public static void main(String[] arg) 
    { 
        Map<String,String> gfg = new HashMap<String,String>(); 
    
        // enter name/url pair 
        gfg.put("GFG", "geeksforgeeks.org"); 
        gfg.put("Practice", "practice.geeksforgeeks.org"); 
        gfg.put("Code", "code.geeksforgeeks.org"); 
        gfg.put("Quiz", "quiz.geeksforgeeks.org"); 
        
        // using iterators 
        Iterator<Map.Entry<String, String>> itr = gfg.entrySet().iterator(); 
        
        while(itr.hasNext()) 
        { 
            Map.Entry<String, String> entry = itr.next(); 
            System.out.println("Key = " + entry.getKey() + 
                                ", Value = " + entry.getValue()); 
        } 
    } 
} 
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

  4、使用forEach(action)方法:

在Java 8中,可以使用Map.forEach(action)方法並使用lambda表示式來迭代Map。此技術乾淨快捷。

// Java code illustrating iteration 
// over map using forEach(action) method 

import java.util.Map; 
import java.util.HashMap; 

class IterationDemo 
{ 
    public static void main(String[] arg) 
    { 
        Map<String,String> gfg = new HashMap<String,String>(); 
    
        // enter name/url pair 
        gfg.put("GFG", "geeksforgeeks.org"); 
        gfg.put("Practice", "practice.geeksforgeeks.org"); 
        gfg.put("Code", "code.geeksforgeeks.org"); 
        gfg.put("Quiz", "quiz.geeksforgeeks.org"); 
        
        // forEach(action) method to iterate map 
        gfg.forEach((k,v) -> System.out.println("Key = "
                + k + ", Value = " + v)); 
        
    } 
} 
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

  5、遍歷鍵並搜尋值(效率低下)

在這裡我們首先遍歷鍵(使用Map.keySet()方法),然後為每個鍵搜尋值(使用Map.get(key)方法)。此方法在實踐中不使用,因為它獲取速度非常慢且效率低下通過鍵設定值可能很耗時。

// Java program to demonstrate iteration 
// over keys and searching for values 

import java.util.Map; 
import java.util.HashMap; 

class IterationDemo 
{ 
    public static void main(String[] arg) 
    { 
        Map<String,String> gfg = new HashMap<String,String>(); 
    
        // enter name/url pair 
        gfg.put("GFG", "geeksforgeeks.org"); 
        gfg.put("Practice", "practice.geeksforgeeks.org"); 
        gfg.put("Code", "code.geeksforgeeks.org"); 
        gfg.put("Quiz", "quiz.geeksforgeeks.org"); 
        
        // looping over keys 
        for (String name : gfg.keySet()) 
        { 
            // search for value 
            String url = gfg.get(name); 
            System.out.println("Key = " + name + ", Value = " + url); 
        } 
    } 
} 
Key = Quiz, Value = quiz.geeksforgeeks.org
Key = Practice, Value = practice.geeksforgeeks.org
Key = GFG, Value = geeksforgeeks.org
Key = Code, Value = code.geeksforgeeks.org

  總結:

  • jdk7及以下通過迭代器迭代Map.Entry<K,V>來遍歷(或者刪除map中的鍵值對)
  • jdk8及以上通過Map.forEach(lambda 表示式遍歷)