ArrayList的效率

Sam*_*yes 1 java performance arraylist

我正在用Java创建一个程序,其中一个球在屏幕上反弹.用户可以添加其他球,它们都互相反弹.我的问题在于存放添加的球.目前,我正在使用ArrayList来存储它们,每次按下空格键时,都会创建一个新的球类并将其添加到数组列表中.这是最有效的做事方式吗?我没有在开始时指定数组列表的大小,因此每次用户想要一个新球时,必须在数组上分配一个新空间是低效的,即使球数会增加数百?是否有另一个类我可以用来以更有效的方式处理这个问题?

谢谢!

编辑:

对不起,我应该更清楚了.我每30毫秒迭代一次球,使用嵌套的for循环来查看它们是否相互交叉.我最常访问一个球(用户可以用箭头键控制的球,游戏的另一个特征),但用户可以选择切换控制球.球永远不会被移除.因此,我经常在球上执行一些相当复杂的计算(我使用自己的矢量类将它们彼此移开).

Jer*_*Orr 5

测量它并找出答案!一目了然,获得这些问题答案的最佳方法通常是设置基准并交换不同的集合类型.

我可以告诉你,每次向ArrayList添加一个新项时,它都不会分配新的空间.分配额外的空间,以便有增长的空间.

LinkedList是另一个List选项.添加项目非常便宜,但随机访问(list.get(10))很昂贵.如果您不需要有序访问(尽管也有有序集),集合也可以是好的,如果您通过某种键/ id访问它们,则需要Map实现.这完全取决于你如何使用该系列.

基于添加的细节进行更新 听起来您大多是在整个列表中进行顺序读取.在那种情况下,LinkedList可能是您的最佳选择.尽管如此,如果您只将List接口公开给代码的其余部分(甚至是更常见的Collection),您可以轻松地交换不同的实现并实际测量差异.