我们都知道你不能这样做:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Run Code Online (Sandbox Code Playgroud)
ConcurrentModificationException等等......这显然有时起作用,但并非总是如此.这是一些特定的代码:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (int i : l) {
if (i == 5) {
l.remove(i);
}
}
System.out.println(l);
}
Run Code Online (Sandbox Code Playgroud)
当然,这会导致:
Exception in thread "main" java.util.ConcurrentModificationException
Run Code Online (Sandbox Code Playgroud)
...即使多线程没有这样做......无论如何.
什么是这个问题的最佳解决方案?如何在循环中从集合中删除项而不抛出此异常?
我也在Collection这里使用任意,不一定是ArrayList,所以你不能依赖get.
我正在HashMap调用testMap哪个包含String, String.
HashMap<String, String> testMap = new HashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)
迭代地图时,if value与指定的字符串匹配,我需要从地图中删除该键.
即
for(Map.Entry<String, String> entry : testMap.entrySet()) {
if(entry.getValue().equalsIgnoreCase("Sample")) {
testMap.remove(entry.getKey());
}
}
Run Code Online (Sandbox Code Playgroud)
testMap包含"Sample"但我无法从中删除密钥HashMap.
而是得到错误:
"Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)
at java.util.HashMap$EntryIterator.next(Unknown Source)"
Run Code Online (Sandbox Code Playgroud) 我试图在Android上搜索HashMap,但遇到问题:
考虑这个例子:
HashMap<String, String> meMap=new HashMap<String, String>();
meMap.put("Color1","Red");
meMap.put("Color2","Blue");
meMap.put("Color3","Green");
meMap.put("Color4","White");
Run Code Online (Sandbox Code Playgroud)
现在我想迭代它并获得每种颜色的值,并希望在"Toast"中显示.我该如何显示它?
我想将一个键值对添加到哈希表(或任何其他集合)中,但必须维护插入顺序.我怎样才能做到这一点?
就像我将1添加为键"一"作为值,2作为键和"两"作为值.
输出应该是:
1:one
2:two
Run Code Online (Sandbox Code Playgroud) 我有这个哈希图
HashMap <Integer,Integer> H = new HashMap <Integer,Integer>();
Run Code Online (Sandbox Code Playgroud)
当我尝试从 HashMap 中删除密钥时,我收到此错误
**Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:922)
at java.util.HashMap$KeyIterator.next(HashMap.java:956)
at Livre.montantTotal(Livre.java:42)**
Run Code Online (Sandbox Code Playgroud)
这是我的代码
for (int e : H.keySet()){
H.put(e, H.get(e)-1);
if (H.get(e) == 0){
H.remove(e);
}
}
Run Code Online (Sandbox Code Playgroud)