我需要检查“tiles”的数组列表,如果它找到一个尚未使用的图 block ,则在该图 block 周围添加 4 个图 block ,但是当我在检查列表时添加新内容时,它会崩溃。如何将对象添加到数组列表而不在检查时使其崩溃?
我添加一个图 block ,然后检查它:
private static List<Tile> tiles = new ArrayList<Tile>();
tiles.add(new Tile(mapsize/2*tilesize, mapsize/2*tilesize));
for(Tile tile: tiles){
if(!tile.spread){
tile.spread=true;
tiles.add(new Tile(tile.position.x-tilesize, tile.position.y)); //this line crashes it
}
}
最佳答案
迭代列表并同时修改它会导致 ConcurrentModificationException 。为了避免这种情况,您可以将新项目添加到新列表中,当您遍历完原始列表后,将两个列表合并到原始列表中。例如:
private static List<Tile> tiles = new ArrayList<Tile>();
private static List<Tile> tmpTiles = new ArrayList<Tile>();
tiles.add(new Tile(mapsize/2*tilesize, mapsize/2*tilesize));
for(Tile tile: tiles){
if(!tile.spread){
tile.spread=true;
tmpTiles.add(new Tile(tile.position.x-tilesize, tile.position.y));
}
}
tiles.addAll(tmpTiles);
关于java - 在检查时向 arraylist 添加一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27584608/