8

我遇到了以下代码:

for(Map.Entry<Integer,VmAllocation> entry : allMap.entrySet()) {
       // ...
}

是什么Map.Entry<K,V>意思?对象是什么entry

我读到该方法entrySet返回地图的集合视图。但我不明白这个for-each循环初始化。

4

4 回答 4

11

Map.Entry是构成 a 的一个元素的键/值对Map。有关更多详细信息,请参阅文档

您通常会将其用于:

Map<A, B> map = . . .;
for (Map.Entry<A, B> entry : map.entrySet()) {
    A key = entry.getKey();
    B value = entry.getValue();
}

如果您需要处理每个键/值对,这比遍历键集并调用get(key)以获取每个值更有效。

于 2013-09-18T04:37:31.843 回答
5

转到文档:Map.Entry

Map.Entry是一个对象,表示映射中的一个条目。(标准映射对于每个 1 个键都有 1 个值。)因此,此代码将迭代所有键值对。

您可以将它们打印出来:

for(Map.Entry<Integer,VmAllocation> entry : allMap.entrySet()) {
       System.out.print("Key: " + entry.getKey());
       System.out.println(" / Value: " + entry.getValue());
}
于 2013-09-18T04:36:48.140 回答
3

条目是键/值对。在这种情况下,它是IntegersVmAllocation对象的映射。

正如javadoc所说

映射条目(键值对)。Map.entrySet 方法返回地图的集合视图,其元素属于此类。获取对映射条目的引用的唯一方法是从此集合视图的迭代器。这些 Map.Entry 对象仅在迭代期间有效;更正式地说,如果在迭代器返回条目后修改了支持映射,则映射条目的行为是未定义的,除非通过对映射条目的 setValue 操作。

于 2013-09-18T04:36:54.480 回答
1

您可以了解Map.Entry Docs

映射条目(键值对)。Map.entrySet 方法返回地图的集合视图,其元素属于此类。获取对映射条目的引用的唯一方法是从此集合视图的迭代器。这些 Map.Entry 对象仅在迭代期间有效;更正式地说,如果在迭代器返回条目后修改了支持映射,则映射条目的行为是未定义的,除非通过对映射条目的 setValue 操作。

检查每个循环文档

for(Map.Entry<Integer,VmAllocation> entry : allMap.entrySet()) 

entry是一个类型变量,每次迭代都会用类型数据Map.Entry实例化。EntryallMap

于 2013-09-18T04:38:24.097 回答