我对地图界面感到困惑。它必须将entrySet()
方法用于集合视图(或使用迭代器)。 entrySet()
返回一个包含其Map元素的Set。同样,这些Set元素中的每一个都是Map.Entry
对象。怎么可能?由于Set只包含一个字段,而Map.Entry
是一个键值对?你能简单解释一下示例&流动。
答案 0 :(得分:2)
Set
包含某种引用类型的元素。 Map.Entry
是引用类型,可以用作Set
。
答案 1 :(得分:0)
想象一下,您拥有一个包含键和值的数据结构。一个值的一个键,一个键的一个值。
Map<K,V>
是此数据结构的接口。它允许按键获取价值。
Set<Map.Entry<K,V>>
是相同数据结构的接口。它允许获得所有键值对。
答案 2 :(得分:0)
根据Orcale文档:Map的entrySet()返回map中包含的映射的Set视图。该集由地图支持,因此对地图的更改将反映在集中,反之亦然。 Map.entrySet方法返回地图的集合视图,其元素属于此类。获取对映射条目的引用的唯一方法是来自此collection-view的迭代器。这些Map.Entry对象仅在迭代期间有效;更正式地说,如果在迭代器返回条目后修改了支持映射,则映射条目的行为是不确定的。 请按照以下代码段进一步说明: -
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MapEntry {
public static void main(String... q){
Map<String,Integer> mapObj = new HashMap<String,Integer>();
mapObj.put("1", new Integer(1));
mapObj.put("2", new Integer(2));
mapObj.put("3", new Integer(3));
mapObj.put("4", new Integer(4));
// First Approach
Set outMap = mapObj.entrySet();
for(Map.Entry<String,Integer> tempMap : mapObj.entrySet()){
System.out.println("KEY : "+tempMap.getKey());
System.out.println("VALUE : "+tempMap.getValue());
}
// Second Approach
for(Iterator it = mapObj.entrySet().iterator(); it.hasNext();){
Map.Entry me = (Map.Entry)it.next();
System.out.println("2nd Approach - Key : "+me.getKey());
System.out.println("2nd Approach - Value : "+me.getValue());
}
}
}
希望这有帮助。