我创建了一个带有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);
}
答案 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()
即可。你不需要额外的循环。