2015-02-24 96 views
-1

我被地图界面搞糊涂了。它必须对集合视图使用entrySet()方法(或使用迭代器)。 entrySet()返回一个包含其地图元素的Set。同样,这些Set元素中的每一个都是一个Map.Entry对象。这怎么可能?由于Set只包含一个字段,而Map.Entry是一个关键值对吗?你能简单地用例子& flow来解释一下。如何设置Map.entrySet()的值

+0

此“集合”包含地图的键值对。一个'Map.Entry'具有与该值一样多的关键字。 – 2015-02-24 07:03:49

回答

2

A Set包含某些参考类型的元素。 Map.Entry是参考类型,可用作Set的元素。

0

想象一下,您拥有包含键和值的数据结构。一个值的一个键,一个键的一个值。

Map<K,V>是这个数据结构的接口。它允许通过密钥获得价值。

Set<Map.Entry<K,V>>是一个用于相同数据结构的接口。它允许获取所有的键值对。

0

根据Orcale文档:Map的entrySet()返回map中包含的映射的Set视图。该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 Map.entrySet方法返回地图的集合视图,其元素属于这个类。获取对地图条目的引用的唯一方法是从该集合视图的迭代器中获取。这些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()); 
     } 
    } 
} 

希望这有助于。