在ArrayList上复制数组或强制初始大小。什么更有效?

时间:2016-11-21 13:44:49

标签: java arrays arraylist

我试图制作一个可变列表(非编程意义上的列表)。该列表是预定长度n

我的第一选择是使用初始化为n的数组。但由于数组不可变,如果我想添加另一个值,我唯一的选择是将数组复制到更大的数组中。我决定尝试使用ArrayList

然后权衡是我无法将ArrayList设置为初始尺寸n。但是,我可以为ArrayList添加值,因为它是可变的。所以我想知道创建一个数组然后在需要时将它复制到一个更大的数组,或者制作一个ArrayList和'初始化'带有for循环的所有n值。

最好使用什么?

1 个答案:

答案 0 :(得分:1)

看看ArrayList的实现是否完全符合您的建议。它只需在需要时创建一个更大的数组,并从小数组中复制所有条目。

只要复制任务很少执行且不是太大的数组,这是非常有效的。这就是为什么你应该总是尝试创建一个ArrayList,其大小参数大约是你期望列表增长到(或更大)的大小。通过这种方式,您可以最大限度地减少(或者可能避免)更大的内部阵列的更换以及所需的所有工作(阵列复制)。

P.S。
如果您的数据是elementar数据类型,您可能希望避免装入包装类型的开销(内存和速度)。在这种情况下,ArrayList不适合您,您可能要为您需要的elementar数据类型实现类似的机制,或者查看www。我在床上有很多类似的实现。

P.p.s
如果您不确定不同方法的性能,那么最好同时实现这两种方法,并为尽可能接近实际数据的测试数据分析性能。