Страницы

Поиск по вопросам

Показаны сообщения с ярлыком length. Показать все сообщения
Показаны сообщения с ярлыком length. Показать все сообщения

пятница, 20 декабря 2019 г.

length и length()

#java #массивы #строки #length


Почему при получении количества элементов определяющих размер массива мы используем
array.length, а при получении количества элементов строки используется метод str.length()?

Почему именно так?
    


Ответы

Ответ 1



В строке мы не можем четко сказать какой реальный размер строки. Для этого используется метод, в котором и подсчитывается длина строки. В массиве же при его создании мы указываем количество элементов. Это количество переменных сохраняется в публичное финальное поле length Если посмотреть глубоко в метод length(): /** * Returns the length of this string. * The length is equal to the number of Unicode * code units in the string. * * @return the length of the sequence of characters represented by this * object. */ public int length() { return value.length >> coder(); } Зайдем теперь в метод coder() byte coder() { return COMPACT_STRINGS ? coder : UTF16; } Java 9 принесла нам концепцию компактных строк. COMPACT_STRINGS - это компактная строка , если да то возвращаем coder(по умолчанию 0), иначе строка не сжатая и мы возвращаем UTF16(1). 0 и 1 используется для сдвига. Если допустим value.length вернет нам 7 - а строка у нас не сжата, то будет выполнен сдвиг битов на 1. В итоге длина строки получится не 7, а 3. Более подробно см. здесь

Ответ 2



Это всего лишь дань инкапсуляции - то есть запрету прямого доступа к внутренним полям объекта. Технически строка в Джаве неизменяема и значит ничто не мешало сделать в ней публичное финальное поле length, даже после введения компактных строк.

среда, 17 июля 2019 г.

Как найти все длинные слова в массиве?

Как изменить код, чтоб в массив сохранялся не только одно максимальное или минимальное значения массива, а несколько. В этом коде в новый массив сохраняется только одно максимальное значения "JavaScript" а максимальных значений массиве два "JavaScript","LiveScript" Не судите строго я новичок.
x=["COBOL", "Ceylon", "Swift", "JavaScript", "R","LiveScript"] s=[] s=x.max { |a, b| a.length <=> b.length } p s


Ответ

x = ["COBOL", "Ceylon", "Swift", "JavaScript", "R","LiveScript"]
vc = x.sort{|a,b| b.size <=> a.size} vc.delete_if{|a| a.size < vc.first.size}
p vc

четверг, 1 ноября 2018 г.

length и length()

Почему при получении количества элементов определяющих размер массива мы используем array.length, а при получении количества элементов строки используется метод str.length()?
Почему именно так?


Ответ

В строке мы не можем четко сказать какой реальный размер строки. Для этого используется метод, в котором и подсчитывается длина строки. В массиве же при его создании мы указываем количество элементов. Это количество переменных сохраняется в публичное финальное поле length
Если посмотреть глубоко в метод length()
/** * Returns the length of this string. * The length is equal to the number of Unicode * code units in the string. * * @return the length of the sequence of characters represented by this * object. */ public int length() { return value.length >> coder(); }
Зайдем теперь в метод coder()
byte coder() { return COMPACT_STRINGS ? coder : UTF16; }
Java 9 принесла нам концепцию компактных строк. COMPACT_STRINGS - это компактная строка , если да то возвращаем coder(по умолчанию 0), иначе строка не сжатая и мы возвращаем UTF16(1). 0 и 1 используется для сдвига.
Если допустим value.length вернет нам 7 - а строка у нас не сжата, то будет выполнен сдвиг битов на 1. В итоге длина строки получится не 7, а 3.
Более подробно см. здесь