2013-01-16 129 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; } } ' –