关于java:使用值从HashMap获取密钥

Get key from a HashMap using the value

本问题已经有最佳答案,请猛点这里访问。

我想使用该值获取HashMap的键。

1
2
3
4
hashmap = new HashMap<String, Object>();

haspmap.put("one", 100);
haspmap.put("two", 200);

这意味着我想要一个值为100的函数,并返回一个字符串。

似乎这里有很多问题要求同样的事情,但它们对我不起作用。

也许是因为我是java新手。

怎么做?


HashMap中的put方法定义如下:

1
Object  put(Object key, Object value)

key是第一个参数,所以在你的put中,"one"是关键。你不能轻易地在HashMap中查找值,如果你真的想这样做,那就是通过调用entrySet()进行线性搜索,如下所示:

1
2
3
4
for (Map.Entry<Object, Object> e : hashmap.entrySet()) {
    Object key = e.getKey();
    Object value = e.getValue();
}

然而,这是O(n)并且有点破坏了使用HashMap的目的,除非你只需要很少这样做。如果您真的希望能够经常按键或值查找,核心Java没有任何东西可供您使用,但Google Collections中的BiMap就是您想要的。


我们可以从VALUE获得KEY。以下是示例代码_

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public class Main {
  public static void main(String[] args) {
    Map map = new HashMap();
    map.put("key_1","one");
    map.put("key_2","two");
    map.put("key_3","three");
    map.put("key_4","four");
    System.out.println(getKeyFromValue(map,"four"));
  }
  public static Object getKeyFromValue(Map hm, Object value) {
    for (Object o : hm.keySet()) {
      if (hm.get(o).equals(value)) {
        return o;
      }
    }
    return null;
  }
}

我希望这对每个人都有帮助。


您混合了键和值。

1
2
3
4
Hashmap <Integer,String> hashmap = new HashMap<Integer, String>();

hashmap.put(100,"one");
hashmap.put(200,"two");

之后一个

1
hashmap.get(100);

会给你"一个"


  • 如果只需要,只需使用put(100,"one")即可。请注意,键是第一个参数,值是第二个。
  • 如果您需要能够同时获取密钥和值,请使用BiMap(来自番石榴)

你让它逆转了。 100应该是第一个参数(它是键),"one"应该是第二个参数(它是值)。

阅读HashMap的javadoc,这可能会对你有所帮助:HashMap

要获取该值,请使用hashmap.get(100)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class Class1 {
private String extref="MY";

public String getExtref() {
    return extref;
}

public String setExtref(String extref) {
    return this.extref = extref;
}

public static void main(String[] args) {

    Class1 obj=new Class1();
    String value=obj.setExtref("AFF");
    int returnedValue=getMethod(value);    
    System.out.println(returnedValue);
}

/**
 * @param value
 * @return
 */

private static int getMethod(String value) {
      HashMap<Integer, String> hashmap1 = new HashMap<Integer, String>();
        hashmap1.put(1,"MY");
        hashmap1.put(2,"AFF");

        if (hashmap1.containsValue(value))
        {
            for (Map.Entry<Integer,String> e : hashmap1.entrySet()) {
                Integer key = e.getKey();
                Object value2 = e.getValue();
                if ((value2.toString()).equalsIgnoreCase(value))
                {
                    return key;
                }
            }
        }  
        return 0;

}
}


如果您不一定要使用Hashmap,我建议使用pair
可以通过第一次和第二次调用访问各个元素。

看看这个http://www.cplusplus.com/reference/utility/pair/

我在这里使用它:http://codeforces.com/contest/507/submission/9531943


如果你通过100给予什么获得"ONE"那么

初始化哈希映射

hashmap = new HashMap();

haspmap.put(100,"one");

并通过检索值
hashmap.get(100)

希望有所帮助。