如果我理解正确(如果我错了请纠正我),列表是由 .NET 中的数组实现的,这意味着每次删除列表中的项目都会导致重新分配所有列表(这反过来意味着O(n)
)。
我正在开发一个游戏,在游戏中,我有很多子弹在任何给定的时刻都在空中飞行,比如说 100 颗子弹,每一帧我将它们移动几个像素并检查与游戏中物体的碰撞,我需要移除从列表中每个碰撞的子弹。
所以我将碰撞的子弹收集在另一个临时列表中,然后执行以下操作:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
因为循环是O(n)
,而删除是O(n)
,我花O(n^2
了 ) 时间来删除。
有没有更好的方法来删除它,或者更适合使用的集合?