1

我刚开始学习Java,听说获取数组的大小是O(1)。为什么不是 O(n)?

java虚拟机不是必须统计数组中的项数吗?

4

3 回答 3

6

不,数组中的项目数在创建时是固定的。

于 2012-05-22T01:40:07.020 回答
3

java虚拟机不是必须统计数组中的项数吗?

那是没有必要的。一个数组的 JVM 表示有一个特殊的字段,它给出了数组实例的长度,以及一个用于访问它的特殊字节码。当它需要长度时,JVM 会使用这些长度。

(在创建数组时,数组的长度也是固定的……但这并不能直接回答问题。假设 JVM仍然可以计算元素。但是,我发现很难看到 JVM将决定在哪里/何时停止计算元素。它如何知道它正在查看的位何时不代表数组基类型的有效值?)

于 2012-05-22T01:47:20.460 回答
1

如上所述,它是一个特殊的字节码函数:

http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

arraylength be arrayref → length 获取数组的长度

于 2012-05-22T01:54:29.510 回答