2014-02-09 44 views
1

這是我的Java程序。如何檢索Java HashMap中給定的所有鍵?

import java.util.*; 
public class HelloWorld 
    { 
    public static void main(String []args) 
     { 
      HashMap hm=new HashMap(); 
      hm.put("ansh",1); 
      hm.put("ansh2",2); 
      hm.put("ansh3",3); 
      hm.put("ansh4",1); 
      hm.put("ansh5",1); 


     } 
    } 

現在我想檢索所有的鍵值1?我們如何在不迭代整個HashMap的情況下做到這一點?

+9

你不能。但是您可以保留兩張地圖 - 第二張地圖用於反向查找 – Bohemian

+0

可以考慮針對界面(地圖)執行並防止原始類型。 –

回答

0

沒有迭代map,這是不可能的。我懷疑你寧願這樣做,而不必自己迭代地圖。如果你想要一些現成的東西,這對你來說是任務,你應該考慮使用Guava庫。你可以在這裏使用Multimap

Multimap<String, Integer> multiMap = ArrayListMultimap.create(); 
multiMap.put("ansh",1); 
multiMap.put("ansh2",2); 
multiMap.put("ansh3",3); 
multiMap.put("ansh4",1); 
multiMap.put("ansh5",1); 

這與您如何創建Map類似。現在來談談你的問題。你想要所有的鍵,對於一個特定的值1。在這種情況下,您可以創建此多重映射的反轉。那會給你一個Multimap<Integer, String>。然後你就可以對關鍵1獲得的價值:

Multimap<Integer, String> map = 
     Multimaps.invertFrom(multiMap, 
          ArrayListMultimap.<Integer, String>create()); 

System.out.println(map.get(1)); 
0

反向查找地圖是Map<Integer,List<String>>。一旦創建,找到具有給定int值的所有字符串很容易。

import java.util.Arrays; 
import java.util.Iterator; 
import java.util.Set; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

/** 
    <P>{@code java MapAndReverseMapXmpl}</P> 
**/ 
public class MapAndReverseMapXmpl { 
    public static void main(String []args) { 
     HashMap<String,Integer> hmS2I = new HashMap<String,Integer>(); 
     HashMap<Integer,List<String>> hmI2S = new HashMap<Integer,List<String>>(); 

     addItem(hmS2I, hmI2S, "ansh",1); 
     addItem(hmS2I, hmI2S, "ansh2",2); 
     addItem(hmS2I, hmI2S, "ansh3",3); 
     addItem(hmS2I, hmI2S, "ansh4",1); 
     addItem(hmS2I, hmI2S, "ansh5",1); 

     System.out.println("string-to-int:"); 
     Set<String> stStrKeys = hmS2I.keySet(); 
     Iterator<String> itrs = stStrKeys.iterator(); 
     while(itrs.hasNext()) { 
      String s = itrs.next(); 
      System.out.println(s + ": " + hmS2I.get(s)); 
     } 
     System.out.println(); 

     System.out.println("int-to-string:"); 
     Set<Integer> stIntKeys = hmI2S.keySet(); 
     Iterator<Integer> itri = stIntKeys.iterator(); 
     while(itri.hasNext()) { 
      Integer I = itri.next(); 
      System.out.println(I + ": " + Arrays.toString(hmI2S.get(I).toArray())); 
     } 
     System.out.println(); 

    } 
    private static final void addItem(HashMap<String,Integer> hm_strToInt, HashMap<Integer,List<String>> hm_intToStr, String s_text, int i_num) { 
     hm_strToInt.put(s_text, i_num); 

     if(hm_intToStr.containsKey(i_num)) { 
     hm_intToStr.get(i_num).add(s_text); 

     } else { 
     ArrayList<String> als = new ArrayList<String>(5); 
     als.add(s_text); 
     hm_intToStr.put(i_num, als); 
     } 
    } 
} 

輸出:

[C:\java_code\]java MapAndReverseMapXmpl 
string-to-int: 
ansh3: 3 
ansh2: 2 
ansh5: 1 
ansh: 1 
ansh4: 1 

int-to-string: 
1: [ansh, ansh4, ansh5] 
2: [ansh2] 
3: [ansh3] 
相關問題