public void add(String value) {
//напишите тут ваш код
if (first.next == null) {
Node obj = new Node();
obj.value = value;
first.next = obj;
last.prev = obj;
} else {
Node obj1 = new Node();
obj1.value = value;
last.prev.next = obj1;
obj1.prev = last.prev;
last.prev = obj1;
}
}
Есть задание по созданию работающего аналога коллекции LinkedList. В ней есть такой код *код*. В нем создается первый объект в блоке if, и , при добавлении новых, они создаются через блок после if-а. Но! У нас есть код создания только лишь одного объекта класса с одним уникальным именем.
Что происходит при добавлении новых объектов в данный список? Т.к. отдельного кода для добавления других объектов со своими именами нет, я так понимаю, итератор постоянно создает новые объекты с одним и тем же названием (в данном случае obj1). Почему так происходит? По логике, если я создаю объект с таким же названием, старый должен перезаписаться/удалиться/еще что-либо. И по итогу должен остаться один последний созданный объект obj1. Но этого не происходит. Объясните пожалуйста работу данного участка кода. Заранее спасибо!Anton Zyablov
37 уровень
Подскажите с заданием LinkedList
Решен
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Александр Web Java Developer
23 октября 2021, 13:33
В этой строке непонятно, что происходит, по логике - в предыдущем узле, следующему узлу присвой значение переменной obj1, но следующий узел в предыдущем, это как раз тот, гда мы находимся т.е просто last! Где в моей логике дыра? Ибо код
не работает...
0
Anton Zyablov Backend Developer
23 октября 2021, 18:41
last сам по себе не ссылается ни на что, ссылка хранится в переменной prev объекта last,
т.е last.prev это ссылка на крайний объект коллекции (не считая last) а потом в его переменную next сохраняем наш новый obj1.
0
Ksenia Volkova Java Developer в DXC Master
1 сентября 2021, 08:22полезный
obj1 - это не название объекта, а название локальной переменной в методе add. (Кстати, достаточно было бы оставить только obj, вынеся ее из if).
То есть с помощью этой переменной мы можем совершать какие-то действия с объектом внутри метода add - и больше нигде.
В самом объекте-списке LinkedList нет никаких obj1. Есть набор объектов (Node), каждый из которых связан с последующим и предыдущим. То есть ссылки на него хранятся в переменных next предыдущего Node и в prev следующего. Чтобы получить объект из середины списка, надо будет пройтись по цепочке элементов с начала списка или с конца. Так устроен LinkedList.
+1
Anton Zyablov Backend Developer
1 сентября 2021, 11:00
Получается объекты Node в LinkedList хранятся без названий, а получаем мы их значения value через ссылки в других нодах по цепочке?
0
Ksenia Volkova Java Developer в DXC Master
1 сентября 2021, 11:11
Да. У объектов вообще нет названий. Есть только ссылки, по которым их можно найти в памяти компьютера.
Эти ссылки можно помещать в переменные с какими-то названиями. Но названия переменных с самими объектами никак не связаны.
0
Anton Zyablov Backend Developer
1 сентября 2021, 11:17
Большое спасибо Ксения🌹)
0