从哈希图中删除特定值和键
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)
}
我想从 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)
}