Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Mutable объекты в Java
Определение и суть
Mutable (изменяемый) объект — это объект, состояние которого можно изменить после его создания. В противоположность immutable (неизменяемым) объектам, которые после создания не меняют своё состояние.
Примеры:
- Mutable:
ArrayList,HashMap,StringBuilder, пользовательские классы с setters - Immutable:
String,Integer,LocalDate,LocalDateTime
Зачем нужны Mutable объекты
1. Производительность и эффективность памяти
// Неправильно (используем String — immutable)
String result = "";
for (int i = 0; i < 1000; i++) {
result += "item" + i; // Создаёт 1000 новых String объектов!
}
// Правильно (используем StringBuilder — mutable)
StringBuilder result = new StringBuilder();
for (int i = 0; i < 1000; i++) {
result.append("item").append(i); // Переиспользует один объект
}
String finalResult = result.toString();
Mutable StringBuilder значительно быстрее, чем создавать новые String объекты в цикле.
2. Модификация коллекций
// ArrayList — mutable коллекция
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.remove(0); // Легко добавлять и удалять элементы
// Если бы мы использовали immutable List, пришлось бы создавать новый список при каждом изменении
3. Изменение состояния объекта без создания нового
public class User {
private String name;
private int age;
// Mutable setters
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
User user = new User();
user.setName("John"); // Изменяем существующий объект
user.setAge(30); // Не создаём новый User, просто обновляем состояние
Производительность
Mutable объекты дешевле:
- Не требуют создание новых объектов при изменении
- Меньше нагрузка на Garbage Collector
- Быстрее при работе с большими объёмами данных
Практический пример: работа с состоянием
public class GameSession {
private int score; // mutable state
private List<Move> moves; // mutable коллекция
public void addScore(int points) {
this.score += points; // Изменяем существующий объект
}
public void recordMove(Move move) {
this.moves.add(move); // Добавляем в существующий список
}
}
GameSession session = new GameSession();
session.addScore(10); // Обновляем состояние
session.recordMove(new Move()); // Добавляем ход
Когда использовать Mutable, когда Immutable
Используйте Mutable когда:
- Часто изменяется состояние объекта
- Нужна высокая производительность
- Работаете с коллекциями
- Нужна гибкость в обновлении данных
Используйте Immutable когда:
- Объект используется как ключ в HashMap
- Объект передаётся между потоками (thread-safety)
- Нужна простота и предсказуемость
- Значение не должно изменяться
Важный баланс
В современной Java рекомендуется искать баланс:
- Mutable коллекции (ArrayList, HashMap) для внутренней работы
- Immutable объекты (String, records, final классы) для публичного API и thread-safety
// Хороший паттерн: внутри используем mutable, снаружи отдаём immutable копию
public class Service {
private List<Item> items = new ArrayList<>(); // mutable
public List<Item> getItems() {
return Collections.unmodifiableList(items); // immutable снаружи
}
}
Mutable объекты — это фундамент эффективной Java программы, особенно когда речь идёт о производительности и работе с большими объёмами данных.