从哈希图中删除特定值和键

Removing from a hashmap a specific value and the key

我想从 hashmap 中删除特定值并从该值中删除键。看,例如,如果我有

hashMap.put(cold, frozen)
hashMap.put(cold,hard)

,在我的图形界面中我将有 cold=[frozen,hard]。如果我想删除 hard 我希望 cold = [frozen] 留下

我的 hashMap 是 private HashMap<String,ArrayList<String>> hashMap ; 这是我尝试过的方法,但还不够好,因为如果我有 2 个不同的键,我想删除的值,它只会删除第一个的值,如果我有 ex 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 的值。

添加条件

if (hashMap.get(key).isEmpty())

之前

hashMap.remove(key);

这将确保您仅在与其关联的列表完全为空时才删除键。


此外,如果您使用 for-each 循环,请确保在从列表中删除元素后不要继续迭代(内部循环),它会给您一个 ConcurrentModificationException。如果您的列表可以多次具有相同的值(并且应该多次删除),请使用 Iterator API 而不是 for-each 循环。

试试这个:-

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

您是否将带有值的 ArrayList 放入散列图中?

如果是,则先检查列表大小:

if (! hashMap.get(key).isEmpty()){
            hashMap.get(key).remove(ValueToRemoved)
 }