如何在嵌套的ArrayList上执行for循环?

时间:2013-12-23 20:32:04

标签: java for-loop arraylist

我打算将这个2D渲染引擎尽可能地模块化。我已经提出了,但还没有完成,绘制/更新精灵的优先级列表,以便我可以控制哪些精灵在彼此前面。

此代码用于遍历每个优先级列表并呈现该列表中的每个精灵。

//I don't entirely understand what this for-each type of loop does.

public static void renderSprites(ArrayList<ArrayList<AbstractSprite>> priorities){
    for (ArrayList<AbstractSprite> priority : priorities){
        for(AbstractSprite sprite : priorities.get(priority)){

           renderSprite(/* what should I reference to get the relevant sprite? */);

           //this is my best guess at what the nested loop would be, but it obviously doesn't work.
          //any ideas?
        }
    }
}

3 个答案:

答案 0 :(得分:4)

应该只是

for (ArrayList<AbstractSprite> priority : priorities){
    for(AbstractSprite sprite : priority){
        renderSprite(sprite);
    }
}

这假设优先级arraylist按从高优先级到低优先级的顺序排序,因此您将渲染具有最高优先级的精灵。

请注意,get()的{​​{1}}方法需要ArrayList,表示您要访问的元素的索引。 For-each循环被实现为使索引对用户不透明,而只是简单地遍历Collection。

答案 1 :(得分:1)

for..each构造迭代集合或数组中的每个元素。构造的形式为:

for(Type varName : [Array || Collection]){
  //for each iteration varName is assigned an element in the collection/array
}

在您的示例中,外部循环已正确构造,并将为每次迭代将ArrayList分配给priority变量。由于您希望迭代ArrayList优先级中的每个元素,因此内部循环未正确构造,但代码尝试使用priority ArrayList中的元素。以下代码显示了正确的结构,并将ArrayList替换为List接口,这比使用集合的具体类型更受欢迎。

public static void renderSprites(List<List<AbstractSprite>> priorities){
    for (List<AbstractSprite> priority : priorities){
        for(AbstractSprite sprite : priority)){
           renderSprite(sprite);
        }
    }
}

答案 2 :(得分:1)

你大部分都在那里。你应该:

public static void renderSprites(List<List<AbstractSprite>> priorities){
    for (List<AbstractSprite> priority : priorities) { // You have priority here
        for (AbstractSprite sprite : priority) { // Now loop over priority to get sprite
           renderSprite(sprite);
         }
    }
}