相关疑难解决方法(0)

迭代集合,在循环中删除对象时避免使用ConcurrentModificationException

我们都知道你不能这样做:

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.

java iteration collections

1158
推荐指数
12
解决办法
46万
查看次数

如何在迭代时从HashMap中删除一个键?

我正在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)

java dictionary

149
推荐指数
2
解决办法
14万
查看次数

Android - 从HashMap获取价值

我试图在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"中显示.我该如何显示它?

java android hashmap android-widget

75
推荐指数
4
解决办法
17万
查看次数

如何维护插入顺序

我想将一个键值对添加到哈希表(或任何其他集合)中,但必须维护插入顺序.我怎样才能做到这一点?

就像我将1添加为键"一"作为值,2作为键和"两"作为值.

输出应该是:

1:one
2:two
Run Code Online (Sandbox Code Playgroud)

java collections dictionary

27
推荐指数
2
解决办法
4万
查看次数

如何从HashMap中删除一个键?

我有这个哈希图

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)

java hashmap

3
推荐指数
2
解决办法
1万
查看次数

我可以通过Properties对象枚举时删除元素吗?

我可以通过Properties对象枚举时删除元素吗?

java

2
推荐指数
1
解决办法
1157
查看次数