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

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:

Java Hashmap: How to get key from value?

我有一个hashmap

private static HashMap projectileSet = new HashMap();

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

public static LegendaryItem getClass(UUID uniqueId) {

return projectileSet.getKey(uniqueId);

}

cs.duke.edu/csl/docs/jgl/api/…

Java是否有反向查找的HashMap?

另见stackoverflow.com/questions/7498751/… (显示迭代的EntrySets,对于合理的n和/或有限数量的执行,这可能完全没问题)

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

要获得getKey这样的方法,你需要一个双向Hash映射,它支持从Value到key的查找,如Java中所讨论的那样,HashMap有反向查找吗? Apache Commons(BiDiMap)或Guava(BiMap)似乎提供此功能。

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

亲爱的朋友,您的代码中存在问题。

当您将唯一ID作为值时,可以将此ID用作hashmap键,而不必进行任何复杂的编码。这样做:

private static HashMap projectileSet = new HashMap();

然后:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值