我想从hashmap
中删除特定值以及该值中的键。看,例如,如果我有
hashMap.put(cold, frozen)
hashMap.put(cold,hard)
,在我的图片界面中,我将cold=[frozen,hard]
。如果我想要删除hard
,我希望cold = [frozen]
留下
我的hashMap是private HashMap<String,ArrayList<String>> hashMap ;
这是我尝试的但它不够好,因为如果我有2个不同的键我想删除的值,它只删除第一个的值,如果我有前cold=[frozen,hard]
和我擦除难以保持cold=[frozen];
for(String key : hashMap.keySet()){
int siz = hashMap.get(key).size();
for(int i = 0; i< siz;i++){
if(hashMap.get(key).get(i).equals(cuvant)){
s.remove(hashMap.get(key).get(i));
siz--;
hashMap.remove(key);
}
}
}
我忘了提到s是带有值的arrayList
。
答案 0 :(得分:2)
您是否将一个ArrayList与值一起放在一个hashmap中?
如果是,请先检查列表大小:
if (! hashMap.get(key).isEmpty()){
hashMap.get(key).remove(ValueToRemoved)
}
答案 1 :(得分:0)
添加条件
var until = require('selenium-webdriver').until;
前
if (hashMap.get(key).isEmpty())
这将确保仅在与其关联的列表完全为空时才删除密钥。
另外,如果使用for-each循环,请确保在从列表中删除元素后不进行迭代(内循环),它会为您提供hashMap.remove(key);
。如果您的列表可以多次具有相同的值(并且应该多次删除),请使用Iterator API而不是for-each循环。
答案 2 :(得分:-1)
试试这个: -
HashMap<String, ArrayList<String>> m = new HashMap<>();
Iterator<Map.Entry<String,ArrayList<String>>> iter = m.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String,ArrayList<String>> entry = iter.next();
ArrayList<String> list = entry.getValue();
for(int i = 0 ; i < list.size() ; i++){
if(list.get(i).equals(cuvant)){
list.remove(i);
}
}
if(list.isEmpty())
iter.remove();
}