2015-02-24 74 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()); 
     } 
    } 
} 

希望這有助於。