关于java:如何在HashMap中获取特定值的Key?

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);

}


您可以使用"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);


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


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