我正在学习 Java 中的集合类。我创建了一个 ArrayList 并向其中添加了一些值。
package LearningJava;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class Java{
public static void main(String args[]) {
Collection values = new ArrayList();
values.add(2);
values.add(3);
values.add(5);
values.add(4);
Iterator itr = values.iterator();
for(int i = 0 ; i<values.size();i++) {
System.out.println(itr.next());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还迭代了这个ArrayList。
如果我在创建后添加值,迭代器的对象会抛出异常。
package LearningJava;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Scanner;
public class Java{
public static void main(String args[]) {
Collection values = new ArrayList();
values.add(2);
values.add(3);
values.add(5);
Iterator itr = …Run Code Online (Sandbox Code Playgroud) 我有个问题。同时访问一个Vector,我得到一个ConcurrentModificationException。我在所有向量迭代中添加了同步块,但也许忘记了一个,或者还有另一个泄漏。
问题是在错误堆栈跟踪中显示的错误是对Vector.retainAll()的调用,这是一个同步方法。我如何猜测碰撞中涉及的其他点呢?
提前致谢
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): java.util.ConcurrentModificationException
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractList$SubAbstractList.listIterator(AbstractList.java:320)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractList$SubAbstractList.iterator(AbstractList.java:307)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractCollection.contains(AbstractCollection.java:128)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.Collections$SynchronizedCollection.contains(Collections.java:432)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.AbstractCollection.retainAll(AbstractCollection.java:319)
08-24 13:37:25.968: ERROR/AndroidRuntime(6582): at java.util.Vector.retainAll(Vector.java:856)
Run Code Online (Sandbox Code Playgroud) 我在使用map并执行一些删除时遇到以下错误.如何避免这种情况?
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
Run Code Online (Sandbox Code Playgroud)
Map<FormField, Object> ItemMap = domainItem.getValues();
for (Map.Entry<FormField, Object> ValMap : ItemMap.entrySet()) {
List<Field> groupIdList = Mapper.getGroupId(groupFieldId);
for (Field field : groupIdList) {
ItemMap.put(new FormField(field), domainItem.getDomainItemLinkId());
}
ItemMap.remove(ValMap.getKey());
}
Run Code Online (Sandbox Code Playgroud) 我正在用java制作基本游戏.在游戏中你是一个障碍,通过使用键(向上,向下等)你应该射击敌人.这也是一个块.我有两个对象之间的工作碰撞,它的工作原理.然而,当子弹击中敌人时,它应该消失.当所有敌人被"杀死"时,你就赢了.这基本上是我到目前为止所得到的.
ArrayList<Enemy> enemy;
ArrayList<Bullet> bullets;
[...]
public void collision (){
for(Bullet b : bullets){
Rectangle r1 = b.getBounds();
for(Enemy e : enemy){
Rectangle r2 = e.getBounds();
if(r1.intersects(r2)){
enemy.remove(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
敌人是由.txt产生的
else if(mark == 'E'){
enemies.add(new Enemy(x * 20 + 10, y * 20 + 35, 40));
}
Run Code Online (Sandbox Code Playgroud)
因此当你用子弹击中敌人时,我首先得到一个java.util.ConcurrentModificationException for(Enemy e : enemy){
但是,如果我按特定顺序击中敌人,我可以删除除1个敌人以外的所有敌人.然后发生错误.碰撞方法放在"游戏循环"中.