使用值从HashMap获取密钥

kec*_*ito 27 java collections hashmap

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

hashmap = new HashMap<String, Object>();

haspmap.put("one", 100);
haspmap.put("two", 200);
Run Code Online (Sandbox Code Playgroud)

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

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

也许是因为我是java新手.

怎么做?

kby*_*yrd 63

HashMap中的put方法定义如下:

Object  put(Object key, Object value) 
Run Code Online (Sandbox Code Playgroud)

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

for (Map.Entry<Object, Object> e : hashmap.entrySet()) {
    Object key = e.getKey();
    Object value = e.getValue();
}
Run Code Online (Sandbox Code Playgroud)

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


Rup*_*dav 25

我们可以得到KEYVALUE.以下是示例代码_

 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; } }
Run Code Online (Sandbox Code Playgroud)

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

  • 这比接受的答案要好. (2认同)

Boz*_*zho 5

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


Udo*_*eld 5

您混合了键和值.

Hashmap <Integer,String> hashmap = new HashMap<Integer, String>();

hashmap.put(100, "one");
hashmap.put(200, "two");
Run Code Online (Sandbox Code Playgroud)

之后一个

hashmap.get(100);
Run Code Online (Sandbox Code Playgroud)

会给你"一个"