如何检索Java HashMap中给定的所有键?

时间:2014-02-09 14:05:22

标签: java hashmap

这是我的Java程序。

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的情况下做到这一点?

3 个答案:

答案 0 :(得分:0)

答案 1 :(得分: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));

答案 2 :(得分: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]