如何在 Java 中迭代任何 Map
如何在 Java 中迭代任何 Map
在 Java中迭代Map 的方法通常有五种。在本文中,我们将讨论所有这些,并研究它们的优缺点。首先,我们不能直接使用iterators 迭代Map,因为 Map 不是Collection。此外,在继续之前,您必须对Map.Entry接口有所了解。由于 Java 中的所有映射都实现了Map接口,因此以下技术适用于任何映射实现(HashMap、TreeMap、LinkedHashMap、Hashtable等)
1. 使用 For-Each 循环迭代 Map.entrySet() :
Map.entrySet()方法返回此映射中包含的映射的集合视图(Set
// 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 values
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 上 使用迭代器进行迭代
这种方法与第一种方法有些相似。在第一种方法中,我们在 Map.Entry
// 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 表达式迭代映射。这种技术既干净又快速。
// 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
还没有评论,来说两句吧...