2010-11-07 109 views
5

我的目標是創建一個地圖的地圖,以便我可以通過其關鍵字檢索外部地圖的信息,然後通過它們的鍵訪問其「內部」地圖。地圖地圖 - 如何將內部地圖保存爲地圖?

但是,當我得到每個內部地圖時,我創建的地圖最初成爲一個對象,我不能像使用外部地圖一樣使用鍵來訪問它的值。

爲了向你學習專家,我想知道如何將所有的地圖保存爲地圖。或者,有沒有可能?

這裏是我的鍛鍊計劃:

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 

public class MapExample { 

    public static void main(String[] args) { 

     Map<Object,String> mp=new HashMap<Object, String>(); 

     // adding or set elements in Map by put method key and value pair 
     mp.put(new Integer(2), "Two"); 
     mp.put(new Integer(1), "One"); 
     mp.put(new Integer(3), "Three"); 
     mp.put(new Integer(4), "Four"); 

     Map<Object,String> mp2=new HashMap<Object, String>(); 
     mp2.put(new Integer(2), "Two2"); 
     mp2.put(new Integer(1), "One2"); 
     mp2.put(new Integer(3), "Three2"); 
     mp2.put(new Integer(4), "Four2"); 

     Map<Object,String> mpMaps=new HashMap(); 

     mpMaps.put("Map1",mp); 
     mpMaps.put("Map2",mp2); 

     System.out.println("This is a map of Maps: " + mpMaps); 

     for (int i=0;i<mpMaps.size();i++){ 
        ArrayList a = new ArrayList(mpMaps.keySet()); 
        Object o=a.get(i); 
        System.out.println("all together: " + mpMaps.size() + "each element is: " + o + " value: " + mpMaps.get(o)); 
     }    
    } 
} 

的解決方案:

Map<Object,Map<Object,String> 
    Map<String, Object> mpMaps=new HashMap<String, Object>(); 

由阿米爾和sleske

+2

想一想爲你的目的另一個可能的解決方案是有一個單一的哈希映射作爲鍵值對。這將減少整個事情的複雜性(也因爲對於實際的泛型語法來說是相當痛苦的)。 – Jack 2010-11-07 23:26:49

+0

是的,那很好!謝謝!我的需求來自一個項目,我需要首先對一張地圖進行排序,然後檢索每張地圖的值以供進一步使用。 – john 2010-11-07 23:53:11

回答

7

這裏是更新的代碼,似乎工作,你需要鍵入地圖的地圖<String, Object>因爲mp不是你不能做的字符串<Object, String>

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 
import java.util.ArrayList; 

public class MapExample { 

    public static void main(String[] args) { 

     Map<Object,String> mp=new HashMap<Object, String>(); 

     // adding or set elements in Map by put method key and value pair 
     mp.put(new Integer(2), "Two"); 
     mp.put(new Integer(1), "One"); 
     mp.put(new Integer(3), "Three"); 
     mp.put(new Integer(4), "Four"); 

     Map<Object,String> mp2=new HashMap<Object, String>(); 
     mp2.put(new Integer(2), "Two2"); 
     mp2.put(new Integer(1), "One2"); 
     mp2.put(new Integer(3), "Three2"); 
     mp2.put(new Integer(4), "Four2"); 

     Map<String, Object> mpMaps=new HashMap<String, Object>(); 

     mpMaps.put("Map1",mp); 
     mpMaps.put("Map2",mp2); 

     System.out.println("This is a map of Maps: " + mpMaps); 

     for (int i=0;i<mpMaps.size();i++){ 
        ArrayList<Object> a = new ArrayList<Object>(mpMaps.keySet()); 
        Object o=a.get(i); 
        System.out.println("all together: " + mpMaps.size() + "each element is: " + o + " value: " + mpMaps.get(o)); 
     }    
    } 
} 
+0

感謝您對我的代碼進行重新編程! – john 2010-11-07 23:39:48

5

您的代碼不編譯。

的一個問題是這樣的:

Map<Object,String> mpMaps=new HashMap(); 
mpMaps.put("Map1",mp); 

這是行不通的,因爲你把地圖(mp)成Map,它的值需要Strings

使用Map<Object,Map<Object,String>,你應該沒問題。

+0

通過重新定義地圖,我應該通過Map得到一張地圖m = mpMaps.get(key)?我試過了,但仍然無法使它工作..... – john 2010-11-08 00:24:43

+0

是的,你應該。如果它不起作用,請編輯您的問題以添加新代碼並準確解釋不起作用。 – sleske 2010-11-08 00:55:04

+0

非常好!我得到它的工作!現在,真正理解Java是多麼的嚴肅!有幾次,我的代碼在Groovy中工作,但在Java上嘗試時失敗了。它失敗了,因爲我沒有給出足夠的細節類型!謝謝! – john 2010-11-08 01:51:07

0

Map mpMaps = new HashMap();

mpMaps.put(「Map1」,mp);

你會得到一個異常與此聲明:mp有類型地圖,但你把它當作一個字符串。

如果我理解你的問題是正確的,你需要一個對象作爲鍵的引用,或者你需要輸入你的鍵/值。

-3

Example

這是創建地圖的地圖的例子。

+0

如果它是文本而不是文本的圖片,這真的會更有用... – WillardSolutions 2016-12-03 04:43:09