重複の可能性:
Javaでは、文字列xの場合、s.length()の実行時コストはいくらですか?O(1)またはO(n)ですか?
StringクラスのlengthメソッドはJavaでどの程度正確に機能しますか?
それは線形時間のforループですか、それとも一定時間になるように長さを追跡するフィールドがありますか?
重複の可能性:
Javaでは、文字列xの場合、s.length()の実行時コストはいくらですか?O(1)またはO(n)ですか?
StringクラスのlengthメソッドはJavaでどの程度正確に機能しますか?
それは線形時間のforループですか、それとも一定時間になるように長さを追跡するフィールドがありますか?
ここに示すように、aの長さはString
フィールドとして保持されます:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java#String .length%28%29
長さを格納するフィールドがあります。文字列は不変であるため、「追跡する」必要はありません(変更される可能性があることを意味します)。
Stringはデータをchar[]
配列に格納しますが、Stringがその配列の一部のみを使用する必要がある場合があります。そのため、そのフィールドには、そのint offset
配列の開始インデックス()と、String(int count
)の生成に使用する長さが格納されます。メソッドはフィールドlength()
の値を返しますcount
。
文字列は不変であるため、文字列オブジェクトが作成されると、その長さはその文字列オブジェクトのインスタンス変数として保存されます。