我有一个赋值,这是我的HashMap初始化..我只能使用标准的JAVA API。
private static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>();
是否可以获取指定值的Key,如getkey(hMap,“今天”),它将返回今天所在的键。
Aslo有没有办法在我的HashSet中获取Key的最后一个值?
感谢任何帮助!
答案 0 :(得分:1)
但实际上你可以拥有多个具有“今天”的键。所以我用键
返回List.toStringprivate static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>();
public static String getKey(Map<String, HashSet<String>> map, String value) {
List<String> returnKey = new ArrayList<String>();
for (String s : map.keySet()) {
if (map.get(s).contains(value)) {
returnKey.add(s);
}
}
return returnKey.toString();
}
public static void main(String[] args) {
// put sth to hMap
System.out.println(getKey(hMap, "today"));
}
答案 1 :(得分:0)
你真正想要的是Google's Guava BiMap。
bimap(或“双向地图”)是一种保留其值及其键值的唯一性的映射。此约束使bimaps支持“反向视图”,这是另一个包含与此bimap相同的条目但具有反向键和值的bimap。
如果你不能使用它,那么你将不得不循环遍历地图条目项目,寻找不会过快的匹配。
答案 2 :(得分:0)
尽可能只使用Map
。
public static <K,V> K getKey(Map<K,V> map,V val){
for(Map.Entry<K,V> entry:map.entrySet()){
if(entry.getValue().equals(val)){
return entry.getKey();
}
}
return null;
}
这只会返回匹配的第一个值的键。如果要返回特定值的所有键,则可以修改此方法以将其键累积到List
并返回该值。
(不要因为快速检索而抱有希望......)