2012-10-10 108 views
0

我對Java很陌生。我寫了使用紅黑樹代碼:這是打印出以下如何深入地搜索Java地圖?

  TreeMap test = new TreeMap(); 
      Map mainMap = new HashMap<>(); 
      Map tempMap = new HashMap<>(); 
      List<Integer> list = new ArrayList<>(); 


      tempMap.put("Visa Credit Card",447747); 
      list.add(421323); 
      list.add(421630); 
      list.add(455451); 
      list.add(469375); 
      tempMap.put("Visa Debit card",list); 

      tempMap.put("Master Card Credit Card",523951); 
      tempMap.put("Master Debit Card",5399); 

      mainMap.put("ICCI",tempMap); 
      mainMap.put("Next",1234); 

      test.put("Values",mainMap); 

      System.out.println(mainMap); 

{Next=1234, ICCI={Master Card Credit Card=523951, Visa Debit card=[421323, 421630, 455451, 469375], Master Debit Card=5399, Visa Credit Card=447747}} 

正如我所預料。但是在這張地圖上,我需要在地圖上搜索一些值,比如說455451。如果這樣做,我應該得到的輸出爲:

Visa Debit card, ICCI

是否可以對地圖進行搜索?

在此先感謝。

+6

首先要做的是:將泛型完全用於您的地圖,而不是原始類型。這會讓你更容易理解你的代碼開始... –

回答

5

But in this map, I need to search for some values in the map, say for example 455451.

基本上你需要遍歷所有鍵/值對:

for (Map.Entry<String, List<Integer>> entry : map.entrySet()) { 
    if (entry.getValue().contains(targetValue)) { 
     System.out.println(entry.getKey()); 
    } 
} 

顯然,這不是非常有效 - 如果你需要做這個有很多,你可能會想創建一個反向地圖,並保持兩個同步。

你可能也想看看GuavaMultimap類型。

+0

我收到一條錯誤消息:'BankIdentification.java:30:錯誤:不兼容的類型'Map.Entry > entry:map.entrySet()' – sriram

+0

@GroovyUser:你不應該讓你的地圖變量以強類型開始。 –

+0

好吧,我在這裏感到困惑,我想要搜索的結果地圖如下所示:'[信用卡= {ICCI = {Master Card Credit Card = 523951,Visa借記卡= [421323,421630,45451,469375 ],Master借記卡= 5399,Visa信用卡= 447747}}]',那麼這屬於'Map '對不對?但是我得到了同樣的錯誤! :( – sriram