如何创建一个方法来获取hashmap中的值键(字符串)

时间:2011-02-17 20:12:19

标签: java hashmap hashset

我有一个赋值,这是我的HashMap初始化..我只能使用标准的JAVA API。

private static HashMap<String, HashSet<String>> hMap = new HashMap<String, HashSet<String>>();

是否可以获取指定值的Key,如getkey(hMap,“今天”),它将返回今天所在的键。

Aslo有没有办法在我的HashSet中获取Key的最后一个值?

感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

但实际上你可以拥有多个具有“今天”的键。所以我用键

返回List.toString
private 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并返回该值。

(不要因为快速检索而抱有希望......)