是否有一个真实的java示例定义何时使用一维数组而不是arraylist更好?

时间:2012-04-12 17:59:45

标签: java arrays performance arraylist

我知道:

在选择一维数组和一个arraylist的情况下,arraylists应该总是最好的选择,但有一个主要的例外;在收集原始值时,效率是一个问题。 由于ArrayList内部使用数组,因此在对Object类型执行操作时,高性能(在处理时间和内存占用方面)与数组类似。但是,当对原始类型(如int或long)进行操作时,ArrayList性能会受到影响,因为ArrayList要求所有元素都包装在Object(例如Integer或Long)中。虽然自动装箱减少了包装和展开所需的代码量,但它不会消除性能问题,因为仍在创建包装器对象。

但我正在寻找一个真实的例子,我将收集原始价值,效率是一个问题。你能想到一个吗?

5 个答案:

答案 0 :(得分:1)

SCIENCE。每个时间间隔有一个或多个传感器收集固定数量的数据值是很常见的。例如。想想每毫秒收集温度的数百个温度计。

答案 1 :(得分:1)

或者数学,你有一个矩阵或双向量,并希望以某种方式对它们进行求和/聚合。这里的拆箱开销很大,有很多值。

答案 2 :(得分:0)

这不是使用数组的唯一原因。

无论何时需要固定大小的可索引集合,数组都是更自然的选择。例如,如果要存储IPv4地址,将字节存储在列表而不是字节数组中会很麻烦。即使在性能方面,它也许并不重要。

在引入仿制药之前,阵列是保证类型安全的唯一方法。

如果您正在寻找效率至关重要的示例,请查看套接字/文件I / O.使用列表作为缓冲区而不是数组将是非常无效的。

答案 3 :(得分:0)

通常在实现算法时,人们使用int / float而不是Integer等。因此,数组是最佳选择。效率提高了。

更多非技术性观察:

人们在学校/大学的最初几天通过学习C开始编程。(一般观察......在100%的情况下无效)。使用数组来解决问题的心态是在我们的大脑中钻取的,我们倾向于尝试使用数组......至少在给出问题的初步想法时,人们会根据数组来思考。

答案 4 :(得分:0)

我在创建字节缓冲区的任何时候都使用过数组。如果您知道结构的确切大小(就像缓冲区可能应该的那样),那么使用数组而不是集合会更容易,更快。