我刚开始学习Java,听说获取数组的大小是O(1)。为什么不是 O(n)?
java虚拟机不是必须统计数组中的项数吗?
不,数组中的项目数在创建时是固定的。
java虚拟机不是必须统计数组中的项数吗?
那是没有必要的。一个数组的 JVM 表示有一个特殊的字段,它给出了数组实例的长度,以及一个用于访问它的特殊字节码。当它需要长度时,JVM 会使用这些长度。
(在创建数组时,数组的长度也是固定的……但这并不能直接回答问题。假设 JVM仍然可以计算元素。但是,我发现很难看到 JVM将决定在哪里/何时停止计算元素。它如何知道它正在查看的位何时不代表数组基类型的有效值?)
如上所述,它是一个特殊的字节码函数:
http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
arraylength be arrayref → length 获取数组的长度