个性化阅读
专注于IT技术分析

如何在Java中遍历Map

本文概述

在Java中, 可以通过多种方式完成Map的迭代。请记住, 我们不能直接使用迭代器来迭代地图, 因为Map接口不是Collection的一部分。 Java中的所有地图都实现Map接口。 Java中有以下几种类型的地图:

  • 哈希图
  • 树状图
  • LinkedHashMap

映射不是Collection, 但仍然可以在Collections框架下考虑。因此, Map是不扩展Collections接口的接口。

迭代器

迭代器是用于对集合进行迭代的接口。它代替了Java Collections Framework中的枚举。迭代器和枚举之间的区别是:

  • 迭代器可以遍历旧元素和非旧元素, 而枚举只能遍历旧元素。
  • 迭代器是快速失败的, 而枚举不是快速失败的。

集合视图

集合视图方法允许通过以下方式将地图视为集合:

  • keySet:它是Map中包含的一组键。
  • values:它是Map中包含的值的集合。
  • entrySet:它是Map中的一组键/值对。

Map接口还具有一个称为Map.entry的小型嵌套接口。收集视图提供了迭代地图的唯一方法。

使用迭代器界面

通过HashMap进行迭代的示例

public static void main(String args[])
{
HashMap<Integer, String> hm = new HashMap<Integer, String>();  //implements map interface
hm.put(110, "Ravi");
hm.put(120, "Prateek");
hm.put(130, "Davesh");	
hm.put(140, "Kamal");
hm.put(150, "Pawan");
Iterator <Integer> it = hm.keySet().iterator();		//keyset is a method
while(it.hasNext())
{
int key=(int)it.next();
System.out.println("Roll no.: "+key+"     name: "+hm.get(key));
}
}
}

输出:

Roll no.: 130     name: Davesh
Roll no.: 150     name: Pawan
Roll no.: 120     name: Prateek
Roll no.: 140     name: Kamal
Roll no.: 110     name: Ravi

使用keyset()和value()方法

keyset():HashMap类的keySet()方法用于对地图中包含的键进行迭代。它返回键的“设置”视图。

句法

Set<K> keyset()

values():HashMap类的values()方法用于对地图中包含的值进行迭代。它返回值的集合视图。

句法

Collection<V> values()

import java.util.Map; 
import java.util.HashMap; 
class IterationExample2 
{ 
public static void main(String[] arg) 
{ 
Map<String, String> map = new HashMap<String, String>(); 
map.put("Gujarat", "Gandhi Nagar"); 			
map.put("Uttar Pradesh", "Lucknow"); 
map.put("Sikkim", "Ganagtok"); 
for (String State : map.keySet())  	//using keyset() method for iteration over keySet
System.out.println("State: " + State); 
for (String Capital : map.values())  		//using values() for iteration over keys
System.out.println("Capiatl: " + Capital); 
} 
}

输出:

State: Gujarat
State: Sikkim
State: Uttar Pradesh
Capital: Gandhi Nagar
Capital: Ganagtok
Capital: Lucknow

使用Map.entry <K, V>方法

Map.Entry <K, V>是一个接口。它返回地图的集合视图, 其元素属于此类。

map.entrySet()方法返回地图中包含的映射的Set视图。地图中的更改也会反映在Set中, 反之亦然。它还支持元素删除, 这会从地图中删除相应的映射。

句法

Set<Map.Entry<K, V>> entrySet()

import java.util.*;
class IterationExample3 
{ 
public static void main(String[] arg) 
{ 
Map<String, Float> map = new HashMap<String, Float>(); 
map.put("Cookies", 90.87f);
map.put("Dry Fruits", 434.23f); 
map.put("Oats", 220.00f); 
map.put("Chocolate", 70.89f); 
for (Map.Entry<String, Float> entry : map.entrySet()) //using map.entrySet() for iteration
{
//returns keys and values respectively
System.out.println("Item: " + entry.getKey() + ", Price: " + entry.getValue()); 
} 
}
}

输出:

Item: Oats, Price: 220.0
Item: Dry Fruits, Price: 434.23
Item: Cookies, Price: 90.87
Item: Chocolate, Price: 70.89

迭代键并获取值

在下面的示例中, 我们首先遍历键, 然后获取值。

import java.util.*;
class IterationExample4 
{ 
public static void main(String[] arg) 
{ 
Map<String, String> map = new HashMap<String, String>(); 
map.put("Sumit", "Singh");
map.put("Devesh", "Mishra"); 
map.put("Rahul", "Tiwari"); 
for (String name: map.keySet()) 		//iteration over keys
{
//returns the value to which specified key is mapped
String lastname=map.get(firstname); 
System.out.println("Key: " + name + ", Value: " + lastname); 
} 
}
}

输出:

Key: Rahul, Value: Tiwari
Key: Devesh, Value: Mishra
Key: Sumit, Value: Singh

使用forEach()方法

ArrayList的forEach()方法用于对Iterable的每个元素执行操作, 直到处理完所有元素为止。

句法

public void forEach(Consumer<? super E> action)

该方法将动作(每个元素要执行的动作)作为参数。它不返回任何东西。如果指定的操作为null, 则抛出NullPointerException。

在下面的示例中, 我们在forEach()方法中使用lambda表达式来打印地图的每个元素。

import java.util.Map; 
import java.util.HashMap; 
class IterationExample5 
{ 
public static void main(String[] arg) 
{ 
Map<String, String> map = new HashMap<String, String>(); 
map.put("TCS", "$100 billion"); 
map.put("Wipro", "$21.5 billion"); 
//iteration over map using forEach() method
map.forEach((k, v) -> System.out.println("Company: "+ k + ", Net worth: " + v)); 
} 
}

输出:

Company: Wipro, Net worth: $21.5 billion
Company: TCS, Net worth: $100 billion

赞(0)
未经允许不得转载:srcmini » 如何在Java中遍历Map

评论 抢沙发

评论前必须登录!