如果需要原始类型的集合,那么数组很可能是完成这项工作的最佳工具。装箱是比较昂贵的操作。对于将用作图元的图元集合(不包括地图),我几乎总是使用数组来避免重复装箱和拆箱。
但是,我很少担心数组和的性能差异
ArrayList。如果
List可以提供更好,更简洁,更可维护的代码,那么除非有一些令人信服的理由,否则我将始终使用
List(或,
Collection或
Set,如适用,但您的问题是关于
ArrayList)。性能
很少 是令人信服的原因。
Collection几乎总是使用s会产生更好的代码,部分原因是数组无法与泛型配合使用,正如约翰内斯·魏斯(JohannesWeiß)在评论中已经指出的那样,还有其他许多原因:
- 集合具有非常丰富的API和各种各样的实现,可以(在大多数情况下)相互轻松地互换
- 如果 偶尔 使用数组版本很有用,则Collection可以简单地转换为数组
- 许多Collection的增长比数组的增长更优雅,这可能是性能问题
- 集合与泛型一起很好地工作,数组表现很差
- 正如TofuBeer指出的那样,数组协方差很奇怪,并且可以以没有对象会起作用的非预期方式起作用。集合以预期的方式处理协方差。
- 阵列需要根据其任务手动调整大小,如果阵列未满,则需要自己进行跟踪。如果需要调整阵列的大小,则必须自己进行操作。
所有这些在一起,我很少使用数组,而更多地使用
ArrayList。但是,我确实
List经常使用s(或just
Collection或
Set)。我最常使用的数组是当要存储的项目是基元并且将被插入和访问并用作基元时。如果装箱和拆箱的速度如此之快,以至于成为微不足道的考虑因素,那么我可能会重新考虑这个决定,但是以某种始终引用的形式处理某些东西并将其存储起来更为方便。(即,用“
int”代替“ Integer”。)



