- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过点及其距离的排列来了解某些事物的可能性(不要告诉我没有,这是我失败的项目)。
for (Point p1 : results) {
remove.clear();
for (Point p2 : results) {
if (Math.sqrt(
Math.pow(p1.getX() - p2.getX(), 2)
+ Math.pow(p1.getY() - p2.getY(), 2)
) % 1 > 0) {
results.remove(p2);
}
}
}
基本上,我试图检查两个点是否具有整数距离,如果不是,则将其从集合中删除,并对所有点(剩余的)执行此操作。
但是,我收到了 ConcurrentModificationException
,并且我不确定如何重构它以完成相同的任务,而不会以另一种方式引发错误。
有什么办法可以解决这个问题还是这只是 Java 的限制?
编辑:虽然重复的建议链接提供了见解,但答案对单个循环的关注有过多的不适用的地方。如果这个问题是重复的,那么前提是使用迭代器就是答案。
最佳答案
一些Collection
实现使用“快速失败”迭代器。当直接从 Collection
中删除项目(使用 Collection#remove
)并对其进行迭代时,将会导致该异常。
增强的 for 循环使用集合的迭代器来迭代集合。
您可以将增强循环更改为常规 for 循环:
for(int i = 0; i < results.size(); i++) {
for(int j = 0; j < results.size(); j++) {
Point result = results.get(j);
if(...) {
//results.remove(j); or
//results.remove(result);
}
}
}
正如评论中提到的,这不适用于Set
。在这种情况下,您可以简单地保留对集合迭代器的引用,并使用它来删除项目:
Iterator<Point> firstIter = results.iterator();
while(firstIter.hasNext()) {
Point p1 = iterator.next();
Iterator<Point> secondIter = results.iterator();
while(secondIter.hasNext()) {
Point p2 = secondIter.next();
if(...) {
secondIter.remove();
}
}
}
关于java - 需要帮助根据比较值修改列表(ConcurrentModification),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31275182/
我试图通过点及其距离的排列来了解某些事物的可能性(不要告诉我没有,这是我失败的项目)。 for (Point p1 : results) { remove.clear(); for (
我在使用 Android 应用程序时遇到问题。 我有一个线程不断迭代列表或形状,更新它们的位置,有时还会从列表中删除一个项目。在线程的 while 循环结束时,它调用 postInvalidate()
考虑玩家类...当玩家加入游戏(创建对象)时,它会检查是否已加入同名玩家... public class Player { private static List players = new
我写了这个小程序来对数组进行排序。据我了解,它应该打印 0,1,2。 但是,当我运行这个程序时,我得到了 ConcurrentModificationException public clas
我们有多个线程尝试从 EHCache 获取数据,这有时会导致并发修改异常。我尝试使用 Retryable 来解决这个问题,但它似乎没有做任何事情。有什么建议吗? @Override @Retryabl
我知道对此有很多问题,但在我的例子中,我将它放在一个同步块(synchronized block)中,我确信没有人会更改我的数组列表。但是如果我使用 for-每个循环.. 为什么? 这是我的代码 fr
枚举是故障安全的。故障安全迭代器将用于原始集合的克隆。那为什么它会抛出 concurrentModificationException?请澄清。 请找到我的代码: public static void
当我添加最后 7 个项目位置时,我遇到了问题,其他 6 个项目在 hasEnded 时可以完美地自动删除。我无法添加第 7 个项目,当我获得其他项目(例如 1-6)并添加第 7 个项目时,我的应用程序
我有一个 hashmap 同时用于多个线程。为了使其线程安全,我将其放入同步块(synchronized block)中: private final Map mapConnections = new
在我的应用程序中,我使用了一个 Map 来存储 POJO 对象。根据要求,我需要遍历 Map 的 keySet 并删除不需要任何修改的对象。 考虑下面的代码: public void remove(
我有以下代码块,我想使用它来将值存储在 JSONObject 中,以便迭代它并在前端呈现它。 JSONObject dlCovs = jsonObject.getJSONObject(
我在操作 HashMap 时遇到了 ConcurrentModificationException。代码如下: Iterator iterator =cacheMap.keySet().ite
我对 Java 应用程序中刚刚遇到的一个问题感到非常困惑。 当我尝试运行下面给出的代码时,Java 在“if ( this.vertexStore.get ( v ).addAll ( output
我是一名优秀的程序员,十分优秀!