本文概述
在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
评论前必须登录!
注册