В Java, для строки x, какова стоимость во время выполнения s.length ()? Это - O (1) или O (n)?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

31
задан Augustin 18 June 2016 в 17:12
поделиться

7 ответов

Нет, длина строки Java является O (1), потому что строковый класс Java хранит длину как поле.

совет, который Вы получили, верен для C, среди других языков, но не Java. C strlen обходит массив символов, ища конец символа строки. Joel говорил об этом на подкасте, но в контексте C.

56
ответ дан sblundy 27 November 2019 в 21:43
поделиться

Вопреки тому, что было сказано до сих пор, нет никакой гарантии, которая String.length() постоянная операция времени в количестве символов, содержавшихся в строке. Ни javadocs для String класс, ни Спецификация языка Java не требуют String.length быть постоянной операцией времени.

Однако в реализации Sun String.length() постоянная операция времени. В конечном счете трудно вообразить, почему любая реализация имела бы непостоянную реализацию времени для этого метода.

14
ответ дан Alexander 27 November 2019 в 21:43
поделиться

Строка хранит длину в отдельной переменной. Так как строка неизменна, длина никогда не будет изменяться. Это должно будет вычислить длину только однажды, когда это будет создано, который происходит, когда память выделяется для него. Следовательно его O (1)

6
ответ дан Satish 27 November 2019 в 21:43
поделиться

Необходимо знать, что length() метод возвращает количество кодовых точек UTF-16, которое является не обязательно тем же как количеством символов во всех случаях.

хорошо, возможности того фактического влияния Вы являетесь довольно худыми, но нет никакого вреда в знании его.

4
ответ дан Marcus Downing 27 November 2019 в 21:43
поделиться

В конечном счете Вы не знали, что могли записать ему этот путь:

for (int i = 0, l = x.length(); i < l; i++) {
    // Blah
}

Это просто немного более чисто с тех пор l, объем меньше.

5
ответ дан Augustin 27 November 2019 в 21:43
поделиться

Я не знаю, как хорошо ссылка переведет, но видеть источник String#length . Короче говоря, #length() имеет O (1) сложность, потому что это просто возвращает поле. Это - одно из многих преимуществ неизменных строк.

0
ответ дан Daniel Spiewak 27 November 2019 в 21:43
поделиться

Согласно это , длина является полем Строкового объекта.

-2
ответ дан JW. 27 November 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: