使用ArrayList作为Object检索HashMap的键值

时间:2017-04-03 03:32:55

标签: java arraylist

我创建了一个带有ArrayList作为Object的HashMap。

public static HashMap<xyz, ArrayList<ptr>> MapTable = new HashMap<xyz, ArrayList<ptr>>();

我想检索与ArrayList中特定值对应的键值。我这样做但不能这样做

public static Host getHost(double abc){ 
    for(int i=0;i<MapTable.size();i++){     
        for(int j=0;j<MapTable.get(i).size();j++){
            if(MapTable.get(i).get(j) == abc){
                for(Map.Entry<Host, ArrayList<ptr>> e: MapTable.entrySet()){
                    value = e.getValue().get(j);
                    if(value == abc){
                        key = e.getKey();
                        break;
                    }
                }

            }
        }

    }
        return(key);
 } 

2 个答案:

答案 0 :(得分:0)

只需遍历地图并检查List是否包含所需的值。

public Xyz retriveKey(Ptr value) {   
        HashMap<Xyz, ArrayList<Ptr>> mapTable = new HashMap<String, ArrayList<Ptr>>();

        for(Map.Entry<String, ArrayList<Integer>> entry : mapTable.entrySet()) {
             if(entry.getValue().contains(value)){
             return entry.key();
         }

         return null;
    }

答案 1 :(得分:0)

您目前的内容很难阅读。部分原因是它没有遵循一些共同的约定。我首先将类名更改为UpperCamelCase,将变量更改为lowerCamelCase。

接下来,循环太多了;在你使用它们的地方,我更喜欢foreach()样式语法。

如果我理解你正在尝试获取值列表包含某个Ptr的键,那么:

public static findKeyForPtr(final Ptr searchPtr) {
    for (Map.Entry<Xyz, List<Ptr>> entry : map.entrySet()) {
        if (entry.getValue().contains(searchPtr)) {
            return entry.getKey();
        }
    }
}

如上所述,您只需在列表中调用contains()即可。你不需要额外的循环。