私は Java を学び始めたばかりで、配列のサイズを取得するのは O(1) だと聞きました。O(n)でないのはなぜですか?
Java 仮想マシンは配列内のアイテムの数を数えてはいけませんか?
私は Java を学び始めたばかりで、配列のサイズを取得するのは O(1) だと聞きました。O(n)でないのはなぜですか?
Java 仮想マシンは配列内のアイテムの数を数えてはいけませんか?
いいえ、配列内の項目数は作成時に固定されています。
Java仮想マシンは配列内のアイテムの数をカウントしてはいけませんか?
それは必要ありません。配列のJVM表現には、配列インスタンスの長さを示す特別なフィールドと、それにアクセスするための特別なバイトコードがあります。長さが必要な場合、JVMはこれらを使用します。
(配列が作成されたときに配列の長さが固定されていることも事実です...しかし、それは質問に直接答えることはありません。仮に、JVMは要素をカウントできます。しかし、JVMがどのように動作するかを理解するのは難しいと思います。要素のカウントを停止する場所/タイミングを決定します。それが調べているビットが配列の基本型の有効な値を表していないことをどのようにして知ることができますか?)
上で述べたように、これは特別なバイトコード関数です:
http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
arraylength be arrayref → length 配列の長さを取得