2

可能重复:
Java Hashmap:如何从值中获取键?

我有一个哈希图

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

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

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

}
4

5 回答 5

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 并获取每个键

于 2013-01-16T05:22:27.480 回答
2

要获得这样的方法,getKey您需要一个支持从值到键的查找的双向哈希映射,如Java 是否有带有反向查找的哈希映射?. Apache Commons( BiDiMap ) 或 Guava( BiMap ) 似乎提供了这个功能。

或者,您可以采用 Amith 提出的迭代方法。

于 2013-01-16T05:26:56.233 回答
1

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

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

进而:

projectileSet.get(uniqueId);
于 2013-01-16T05:33:34.550 回答
0

您无法直接在标准 Java 地图中获得该功能。因为 java map 不支持逆视图,所以从给定值获取键。为此,最好使用双向地图实现。示例之一:BiMap

于 2013-01-16T05:28:08.650 回答
0

通过使用keySet(),您可以... 它将以 set... 的形式返回所有键

于 2013-01-16T05:28:53.340 回答