3

我知道:

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

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

4

5 回答 5

1

SCIENCE. It's very common to have one or more sensors collecting a fixed number of data values per time interval. E.g. think of hundreds of thermometers collecting the temperature every millisecond.

于 2012-04-12T18:06:11.540 回答
1

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

于 2012-04-12T18:11:27.147 回答
0

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

于 2012-04-12T18:16:58.393 回答
0

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

每当您需要一个固定大小、可索引的集合时,数组都是更自然的选择。例如,如果要存储 IPv4 地址,将字节存储在列表中而不是字节数组中会很尴尬。尽管就性能而言,这可能并不重要。

在引入泛型之前,数组是保证类型安全的唯一方法。

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

于 2012-04-12T18:10:49.600 回答
0

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

更多非技术观察:

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

于 2012-04-12T18:14:50.080 回答