42 прочтения · 1 год назад
🖇 Создание глубокой и поверхностной копии объекта. Java Stream API: когда использовать map() и FlatMap() При работе с объектами в Java бывают случаи, когда вам необходимо создать копию объекта. Однако не все копии одинаковы. Существует два основных способа копирования объектов: глубокое копирование (Deep Copy) и поверхностное копирование (Shallow Copy). Глубокое копирование: что это такое? Представьте, что у вас есть коллекция фигур, каждая из которых имеет свой перечень свойств. Глубокая копия объекта означает создание совершенно новой копии исходного объекта вместе со всеми вложенными объектами, которые он содержит. Иными словами, это похоже на точную копию каждой формы, включая все детали. Поверхностное копирование: в чем разница? С другой стороны, поверхностное копирование создает копию объекта, не зная о структуре класса, который он копирует. То есть, объект копируется без содержащихся в нем вложенных объектов. По умолчанию в Java применяется поверхностное копирование. Для этого используется метод clone(). Давайте применим копирование на практике: пример фигур Представьте, что у вас есть класс с именем Circle, в котором есть вложенный объект класса Point, представляющий его центр. Сейчас мы увидим, как глубокое и поверхностное копирование работают с этими объектами. public class Circle { public Point center; public int radius; public Circle(Point center, int radius) { this.center = center; this.radius = radius; } } public class Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } Создание поверхностной копии Для поверхностного копирования мы просто копируем ссылки на вложенные объекты: public Circle shallowCopyCircle(Circle original) { return new Circle(original.center, original.radius); } Создание глубокой копии ля глубокой копии Circle нам нужно создать новые экземпляры объектов Point и Circle. public Circle deepCopyCircle(Circle original) { Point copiedPoint = new Point(original.center.x, original.center.y); return new Circle(copiedPoint, original.radius); } Создание простого класса CopyUtil Вот класс утилиты с кодом копирования объектов: public class CopyUtil { public Circle deepCopyCircle(Circle original) { Point copiedPoint = new Point(original.center.x, original.center.y); return new Circle(copiedPoint, original.radius); } public Circle shallowCopyCircle(Circle original) { return new Circle(original.center, original.radius); } } Модульные тесты Давайте напишем несколько простых тестов для проверки наших методов глубокого и поверхностного копирования. 📌 Продолжение @javarush
13 прочтений · 5 лет назад
Копирование объектов в JS
Перевод этой статьи. В этой статье мы рассмотрим разные способы поверхностного и глубокого копирования объектов в JavaScript. Для начала стоит освежить пару базовых принципов. Объекты в JavaScript – это просто ссылки на участок в памяти. Эти ссылки мутабельны, т.е. их можно переназначить. Когда мы делаем копию такой ссылки, мы просто получаем 2 ссылки, которые указывают на один и тот же участок в памяти: В примере выше обе переменные – foo и bar – будут меняться при изменении одной из них. Это яркий...