【问题标题】:How can I get the Key for a specific Value in a HashMap? [duplicate]如何获取 HashMap 中特定值的键? [复制]
【发布时间】:2012-12-30 09:11:55
【问题描述】:

可能重复:
Java Hashmap: How to get key from value?

我有一个哈希图

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

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

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

}

【问题讨论】:

标签: java hashmap


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用“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 并获取每个键

    【讨论】:

      【解决方案3】:

      使用keySet()可以...它会以set...的形式返回所有的keys

      【讨论】:

        【解决方案4】:

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

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

        然后:

        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; } }
        【解决方案5】:

        要获得像getKey 这样的方法,您需要一个支持从值到键查找的双向哈希映射,如Does Java have a HashMap with reverse lookup? 中所述。 Apache Commons(BiDiMap) 或 Guava(BiMap) 似乎提供了这个功能。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多