Java에서 문자열 x에 대해 s.length()의 런타임 비용은 얼마입니까? 그것은 O (1) 또는 O (n)입니까?
for (int i = 0; i < x.length(); i++) {
// blah
}
은 x.length()
를 반복적으로 호출하므로 실제로 O (n^2)입니다. 대신 다음을 사용해야합니다.
int l = x.length();
for (int i = 0; i < l; i++) {
// blah
}
사실입니까? 문자열 길이가 String 클래스의 개인 정수 속성으로 저장 되었습니까? 아니면 String.length()
정말 길이를 결정하기 위해 전체 문자열을 걷고 있습니까?
문자열의 길이를 계산하는 것이 O (n) 인 경우에도 전체적인 복잡성은 여전히 O (n^2)가되지 않습니다. 길이는 한 번 계산되고 for 루프에서 경계 값으로 사용되며 각 반복에서 계산되지 않습니다. –
내가 아는 한 경계 값은 캐시되지 않습니다. 루프에서 경계가 수정되면 어떻게 될까요? –
경계는 매번 계산됩니다. for 루프의 검사는 임의의 표현식이라는 것을 기억하십시오. 컴파일러는 실제로 거기에있는 것을 신경 쓰지 않으며 가정을 할 수 없습니다. 매번 다른 것을 반환하는 메서드를 쉽게 호출 할 수 있습니다. – Herms