从散列映射中删除特定值和密钥

时间:2015-08-13 12:38:10

标签: java hashmap key

我想从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

3 个答案:

答案 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();
        }