Set中的每个元素如何成为Map.Entry对象?

sha*_*007 2 java

我有点困惑.我正在阅读地图界面.它必须使用集合视图的entrySet()方法来使用迭代器.entrySet()返回一个包含map元素的Set.同样,每个Set元素都是一个Map.Entry对象.怎么可能?因为Set只包含一个字段,而Map.Entry是一个键值对?

Sto*_*ica 6

地图基本上是一组key => value映射.此外,键是唯一的,值不一定是.键值对封装在Map.Entry对象中.当您遍历地图的条目(=键值对集合)时,entry您可以为每个条目获取密钥entry.getKey()和值entry.getValue().

除了条目集之外,映射还提供了一组键和值集合.例如,在a中Map<String, Date>,您有一组键值对Set<Map.Entry<String, Date>>,键组Set<String>和值集合Collection<Date>.

迭代条目的具体示例:

Map<String, Date> map = new HashMap<String, Date>();
map.put("now", new Date());
map.put("now+", new Date());
for (Map.Entry<String, Date> entry : map.entrySet()) {
    String key = entry.getKey();
    Date value = entry.getValue();
    System.out.println(String.format("%s => %s", key, value));
}
Run Code Online (Sandbox Code Playgroud)

迭代的另一种方法是通过键:

for (String key : map.keySet()) {
    Date value = map.get(key);
    System.out.println(String.format("%s => %s", key, value));
}
Run Code Online (Sandbox Code Playgroud)

但这效率较低,因为对于每个键,您必须执行查找才能获得值,这与使用直接访问值的条目形成对比.