 <p>What it looks like is happening here is because you're altering the List's whilst iterating through them. Consider this for loop you have here </p> <pre><code> for(int i=0;i&lt;ballList.size();i++){ Ball bb=ballList.get(i); bb.update(); bb.render(); bb.migrate(); text(bb.age,bb.pos.x,bb.pos.y); } </code></pre> <p>Say ballList has 2 balls in it both age 3, the first loops gets ball[0] and then removes it from the list, i will increment and the loop will immediately exit because ballList.size() is now 1. So it's not the ball which gets to age 4 that vanishes but the subsequent one. </p>