从HashMap中删除所有值但保留密钥?

时间:2016-03-16 18:22:14

标签: java for-loop data-structures hashmap

我正在尝试删除与values中所有keys相关联的所有HashMap,但仍保留密钥

以下是正确/最有效的方法吗?

 for (Map.Entry<Kennel, List<Dog>> entry : hashMap.entrySet()) {
            String key = entry.getKey().getId();
            List<Dog> dogList = entry.getValue();

            //Loop through the list associated with each key and delete each Dog in the list
            for (int i=0; i<dogList.size(); i++){

                dogService.delete(dogList.get(i));
                dogService.save(dogList.get(i));


            }

        }

3 个答案:

答案 0 :(得分:1)

简单:

for(dogs : hashMap.values()) {
    for(dog : dogs) {
        dogService.delete(dog);
        dogService.save(dog);
    }
    dogs.clear();
}

答案 1 :(得分:1)

我不知道你要在这里完成什么,但如果你只想要唯一的密钥,那么你应该使用HashSet代替HashMap

但是,如果要执行删除,您可以执行以下操作:

for (Kennel key : hashMap.keySet()) {
    hashMap.put(key, null);
}

我写了Kennel key,假设您HashMap的密钥属于Kennel类型。

答案 2 :(得分:0)

你可以在最后使用:

cgi.fix_pathinfo = 1

删除整个列表,但是如果你想在将来把新狗放入其中(我认为你想要),并且你的狗列表是可修改的,以下方法更适合内存:

hashMap.put(entry.getKey(), null);

因为您将来会避免分配新列表。另请注意for (Map.Entry<Kennel, List<Dog>> entry : hashMap.entrySet()) { String key = entry.getKey().getId(); Iterator<Dog> it = entry.getValue().iterator(); while (it.hasNext()) { Dog dog = it.next(); dogService.delete(dog); dogService.save(dog); it.remove(); } } 的使用,允许在迭代时删除