2013-01-16 53 views
2

可能重复:
Java Hashmap: How to get key from value?如何在HashMap中获取特定值的密钥?

我有一个HashMap

private static HashMap<ObjectClass, UUID> projectileSet = new HashMap<ObjectClass, UUID>(); 

和一个未完成的方法,我想返回对应于UUID的对象类

public static LegendaryItem getClass(UUID uniqueId) { 
    return projectileSet.getKey(uniqueId); 

} 
+0

http://www.cs.duke.edu/csl/docs/jgl/api/COM.objectspace.jgl.examples.HashMapExamples。 HTML – Mikhail

+1

[不会的Java与反向查找一个HashMap?(http://stackoverflow.com/q/1670038) –

+0

另见http://stackoverflow.com/questions/7498751/get-the-keys-with-the -biggest值,从-A-的HashMap(显示迭代EntrySets,这是一个合理的'N'和/或执行次数限制可能完全确定) – 2013-01-16 05:29:03

回答

3

您可以使用“KeySet()”方法从HashMap返回键。

HashMap objH=new HashMap<>(); 
Set objSet=objH.keySet(); 
public static LegendaryItem getClass(UUID uniqueId) { 
    Iterator objItr=objSet.iterator(); 
    while(objItr.hasNext()){ 
     UUID objStr=(UUID) objItr.next(); 
     if(objStr.equals(uniqueId)){ 
      return objStr; 
     } 
    } 
} 

迭代的ObjSet并获得每个键

2

要获得如getKey你需要它支持从值查找到关键,因为在Does Java have a HashMap with reverse lookup?讨论了双向定向哈希映射的方法。 Apache Commons(BiDiMap)或Guava(BiMap)似乎提供此功能。

或者你可以去那Amith提出了迭代的方法。

0

不能直接获得该功能的标准Java映射。由于java映射不支持反向视图,因此从给定值获取密钥。为此,最好使用双向映射实现。其中一个例子:BiMap

0

通过使用keySet()你可以...这将返回集合的形式,所有按键...

1

亲爱的我的朋友,还有你的代码中的问题。 当你有唯一的id作为你的值时,你可以使用这个id作为hashmap key,你不必做任何复杂的编码。只是这样做:

private static HashMap<UUID, ObjectClass> projectileSet = new HashMap<UUID, ObjectClass>(); 

然后:

projectileSet.get(uniqueId); 
+0

这个工程得到钥匙的价值,但问题是关于如何获得价值的关键。但是,我会幽默这个建议,原来的映射是不正确的倒置。+1 – 2013-01-16 05:34:11

+0

有一个逻辑,使这不正确的。这些值可以在两个不同的唯一键中相同。在这种情况下,您的代码必须返回具有此值的一组键。但是如果你想要一个代码来完成这项工作,告诉我,我可以为你写。 –

+0

这是您可能需要的代码: 'package test; import java.util.ArrayList; import java.util.HashMap; import java.util。组; public class CustomHashMap extends HashMap ArrayList getKeys {Object value} ArrayList keys = null; if(containsValue(value)){ keys = new ArrayList(); Set keySet = keySet(); (key(keySet)){ if(get(key).equals(value)) keys.add(key); } } return keys; } } ' –