HashMap delete entry AND position
我只是在和
在我的哈希图中有一些条目。我现在正在搜索所有条目中的某个值。如果找到该值,则使用
有没有可能的办法?
这就是我到目前为止得到的,但它只删除条目,而不是整个位置…
1 2 3 4 5 | for (Entry<Integer, String> entry : myMap.entrySet()) { if (entry.getValue().contains("EnterStringHere")) { myMap.remove(entry); } } |
不能从映射中删除Entry对象。remove方法需要键。
相反,您可以尝试以下操作:
1 2 3 4 5 6 7 8 9 |
。
此外,在迭代时不能直接在结构上修改映射,否则将出现ConcurrentModification异常。为了防止出现这种情况,需要使用迭代器上的remove方法进行删除,如上面的代码所示。
这是错误的
1 2 3 4 5 | for (Entry<Integer, String> entry : myMap.entrySet()) { if (entry.getValue().contains("EnterStringHere")) { myMap.remove(entry); // you should pass the key to remove } } |
。
但不能用这种方法删除元素。你会得到
您可以尝试使用
1 2 3 4 5 6 7 8 9 10 11 12 | Map<Integer,String> map=new HashMap<>(); map.put(1,"EnterStringHere"); map.put(2,"hi"); map.put(3,"EnterStringHere"); Iterator<Map.Entry<Integer,String>> iterator=map.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<Integer,String> entry=iterator.next(); if(entry.getValue().equals("EnterStringHere")){ iterator.remove(); } } System.out.println(map); |
输出:
1 | {2=hi} |
。
您真的需要查看hashmap remove()。
Because after a certain time I need to check if the HashMap is empty. But another answer seems to get the hint I needed. If I delete the value the entry will be null? Can i do a check if every entry is null easily or do i have to iterate over every entry again?
号
不从映射中删除值删除映射。此代码不会删除任何内容:
1 | myMap.remove(entry); |
。
因为传递了entry对象,所以需要传递映射的键才能删除它,请参见map.html删除文档。
因此
1 | myMap.remove(entry.getkey()); |
但是,使用当前的方法,您将在
如果从映射中删除映射,则该映射将不再存在于映射中。bucket是否为
您可以使用map isEmpty检查映射是否为空,因此不需要检查每个条目是否为空,也不需要在整个映射上迭代。
您可以使用map检查映射是否包含键的映射。containskey
可以使用map containsValue检查映射是否至少包含一个值的映射
迭代时从地图中删除etriey以使用
1 2 3 4 5 6 7 |
。
既然你有
了解
如果要设置pack-your hashmap,请尝试检查映射的大小,然后删除一个,然后再次检查大小。
1 2 3 | hashmap.size(); => 10 hashmap.remove(obj); hashmap.size() => 9 |
这意味着hashmap已打包,不会有任何空条目。最后,hashmap将自动不包含任何值
假设您有一个
你不能超越与
但当你使用
如:
1 2 3 4 5 6 7 8 |
输出:
1 2 3 | size of the map 3 map is {b=2, c=3, a=1} size of the map 2 map is {c=3, a=1} null // you are getting null since there is no key"b" |
号
如果您想检查地图是否为空,可以添加此内容以提供对您的评论的回答。只需使用
好吧,我有一个很容易编写的代码示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class TestingThingsOut { public static void main(String [] args) { HashMap<Integer, String> myMap = new HashMap<Integer, String>(); myMap.put(123,"hello"); myMap.put(234,"Bye"); myMap.put(789,"asdf"); System.out.println(myMap); // it says: {789=asdf, 234=Bye, 123=hello} System.out.println(myMap.size()); // it says:"3" for (Entry<Integer, String> entry : myMap.entrySet()) { if (entry.getValue().contains("hello")) { myMap.remove(entry); } } System.out.println(myMap); // it says: {789=asdf, 234=Bye, 123=hello} System.out.println(myMap.size()); // it says:"3" again } |
}