如何获取 HashMap 中特定值的键? [复制]

Posted

技术标签:

【中文标题】如何获取 HashMap 中特定值的键? [复制]【英文标题】:How can I get the Key for a specific Value in a HashMap? [duplicate] 【发布时间】: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);


【问题讨论】:

cs.duke.edu/csl/docs/jgl/api/… Does Java have a HashMap with reverse lookup? 另见***.com/questions/7498751/…(显示迭代EntrySet,这对于合理的n 和/或有限数量的执行可能完全没问题) 【参考方案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 提出的迭代方法。

【讨论】:

以上是关于如何获取 HashMap 中特定值的键? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 javascript 对象中获取值的键? [复制]

将HashMap的特定键值集复制到另一个

如何从 Kotlin 中的 Hashmap 获取值的关键?

C# - 字典 - 如何在字典中获取特定类值的最大值? [复制]

获取 PL/SQL 集合中特定元素的键或索引?

如何使用 LINQ 在 asp.net mvc 中获取具有特定子值的所有父母? [复制]