- •1. Поняття класа-оболонки. Розташування цих класів ієрархії класів Java
- •2. Операції упаковки та распаковки класів-оболонок
- •3. Практичне застосування класів-оболонок
- •4. Порівняння рядків
- •5. Особливості класу String для обробки рядків
- •6. Особливості класу StringBuffer для обробки рядків. Довжина та місткість буферу
- •7. Відмінності між класами String та StringBuffer
- •8. Класи та інтерфейси каркасу колекцій мови Java
- •9. Інтерфейс Collection
- •Iterator
- •10. Порівняння реалізацій інтерфейсу List
- •11. Програмна реалізація ArrayList. Основні операції
6. Особливості класу StringBuffer для обробки рядків. Довжина та місткість буферу
Клас StringBuffer представляє розширюються та доступні для змін послідовності символів, дозволяючи вставляти символи і подстроки в існуючу рядок і в будь-якому місці. Даний клас набагато економічніше в плані споживання пам'яті і настійно рекомендується до використання.
Існує чотири конструктора класу:
StringBuffer () - резервує місце під 16 символів без перерозподілу пам'яті
StringBuffer (int capacity) - явно встановлює розмір буфера
StringBuffer (String string) - встановлює початкове вміст і резервує 16 символів без повторів резервування
StringBuffer (CharSequence cs) - створює об'єкт, що містить послідовність символів і резервує місце ще під 16 символів
length () - Метод дозволяє отримати поточну довжину об'єкта.
capacity () - Метод дозволяє отримати поточний обсяг виділеної пам'яті.
ensureCapacity () - Можна попередньо виділити місце для певної кількості символів, якщо збираєтеся додавати велику кількість маленьких рядків.
setLength (int length) - Встановлює довжину рядка. Значення має бути невід'ємним.
charAt (int index) і setCharAt (int index, char ch) - Можна витягти значення окремого символу з допомогою методу charAt () і встановити нове значення символу за допомогою методу setCharAt (), вказавши індекс символу і його значення.
getChars () - Дозволяє скопіювати подстроку з об'єкта класу StringBuffer в масив. Необхідно подбати, щоб масив був достатнього розміру для прийому потрібної кількості символів зазначеної підрядка.
append () - Метод з'єднує уявлення будь-якого іншого типу даних. Є кілька перевантажених версій.
StringBuffer append (String string)
StringBuffer append (int number)
StringBuffer append (Object object)
Строкове представлення кожного параметра за лаштунками отримують через метод String.valueOf () і потім отримані рядки склеюються в підсумкову рядок.
insert () - Вставляє один рядок в іншу. Також можна вставляти значення інших типів, які будуть автоматично перетворені в рядки. Вам треба вказати індекс позиції, куди буде вставлятися рядок.
reverse () -Дозволяє змінити порядок символів на зворотний.
delete () і deleteCharAt () - Метод delete () видаляє послідовність символів, вам треба задати індекс першого символу, який треба видалити, а також індекс символу, наступного за останнім з видаляються. Метод deleteCharAt () видаляє один символ із зазначеної позиції.
replace () - Дозволяє замінити один набір символів на інший. Потрібно вказати початковий і кінцевий індекс і рядок заміни.
substring () - Дозволяє отримати частину вмісту. Є дві форми методу. У першому випадку потрібно вказати індекс початку позиції, з якою потрібно отримати підрядок. У другому варіанті вказується початковий індекс і кінцевий індекс, якщо потрібно отримати текст з середини рядка.
7. Відмінності між класами String та StringBuffer
Об'єкт String просто зберігає масив символів і надає методи для виконання операцій на цьому масиві. Об'єкт String - також єдиний об'єкт, який перевантажує оператор конкатенації "+". Це дозволяє строковим бути створеними конкатенацией одного або декількох об'єктів String.
Однак рядка - незмінні значення, одного разу створені вони не можуть змінюватися. Всякий раз, коли Ви перепризначуваних значення строкової змінної, ви насправді створюєте інший об'єкт String і повідомляєте JVM, що потрібно використовувати недавно створений об'єкт String як (placeholder) для змінної.
Об'єкт StringBuffer теж зберігає масив символів, але з деякими тонкими відмінностями.
В ньому не перевантажений метод конкатенації "+".
Його вміст може бути змінено без створення нових екземплярів об'єкта StringBuffer.
Застосовуючи об'єкт StringBuffer, тільки один об'єкт використовується протягом дії циклу. Підвищення продуктивності може бути неочевидно в такому малому циклі, як представлений вище. Однак спробуйте зробити це з об'єктом String, коли ви припускаєте змінювати його сотні разів, і ви почнете звертати увагу на різницю.