How can I get the Key for a specific Value in a HashMap?
Possible Duplicate:
Java Hashmap: How to get key from value?
我有一个hashmap
1
| private static HashMap<ObjectClass, UUID> projectileSet = new HashMap<ObjectClass, UUID>(); |
和一个未完成的方法,我想返回对应于UUID的ObjectClass
1 2 3 4
| public static LegendaryItem getClass(UUID uniqueId) {
return projectileSet.getKey(uniqueId);
} |
-
cs.duke.edu/csl/docs/jgl/api/…
-
Java是否有反向查找的HashMap?
-
另见stackoverflow.com/questions/7498751/… (显示迭代的EntrySets,对于合理的n和/或有限数量的执行,这可能完全没问题)
您可以使用"KeySet()"方法从HashMap返回密钥。
1 2 3 4 5 6 7 8 9 10 11
| 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并获取每个键
要获得getKey这样的方法,你需要一个双向Hash映射,它支持从Value到key的查找,如Java中所讨论的那样,HashMap有反向查找吗? Apache Commons(BiDiMap)或Guava(BiMap)似乎提供此功能。
或者你可以采用Amith提出的迭代方法。
亲爱的朋友,您的代码中存在问题。
当您将唯一ID作为值时,可以将此ID用作hashmap键,而不必进行任何复杂的编码。这样做:
1
| private static HashMap<UUID, ObjectClass> projectileSet = new HashMap<UUID, ObjectClass>(); |
然后:
1
| projectileSet.get(uniqueId); |
-
这可以从密钥中获取值,但问题是如何获取值的密钥。 但是,我会幽默这个建议,即原始映射被错误地反转。+ 1
-
有一种逻辑使得这不正确。 两个不同的唯一键中的值可以相同。 在这种情况下,您的代码必须返回具有此值的键数组。 但是如果你想要一个代码来完成这项工作,请告诉我,我可以为你编写代码。
-
这是您可能需要的代码:package test; import java.util.ArrayList; import java.util.HashMap; import java.util.Set; public class CustomHashMap extends HashMap { public ArrayList getKeys(Object value) { ArrayList keys = null; if (containsValue(value)) { keys = new ArrayList(); Set keySet = keySet(); for (Object key : keySet) { if (get(key).equals(value)) keys.add(key); } } return keys; } }
通过使用keySet(),你可以...它将以集合的形式返回所有键...
您无法直接在标准Java映射中获取该功能。因为java map不支持反向视图,所以从给定值获取键。为此,最好使用双向映射实现。其中一个例子:BiMap