JavaRush /Java блог /Архив info.javarush /Своя реализация двусвязного LinkedList, глубокое клониров...
alexnjc
31 уровень

Своя реализация двусвязного LinkedList, глубокое клонирование.

Статья из группы Архив info.javarush
Задание составить свою реализацию односвязного или двусвязного списка объектов, но при этом нельзя использовать стандартные реализации типа LinkedList. Написать методы глубокого клонирование этого списка, проверить как клонируется лист. Для создания копии нельзя использовать конструктор класса. При удалении элементов из копии списка при этом оригинал списка не должен измениться, то есть копии должны быть полностью независимы друг от друга. Какие способы будут оптимальны? Написал кучу кода, все вроде бы работает кроме глубокого клонирования. При изменении списка возникает куча глюков :-( //List as FILO stack public class MyLinkedList implements Cloneable, Serializable { private Node objects; // top of stack private Node first; // bottom of stack ... Внутренний класс Node // FILO class Node implements Cloneable { private Object o; private Node next; private Node prev; public Node(Object o) { if (o !=null){ this.o = o; next = null; prev = null; System.out.println("First element Node created!"); System.out.println("o= "+o +" next= " + next+" prev= "+ prev); } else throw new IllegalArgumentException("Null element not allowed here!"); } public Node(Object o, Node next) { if (o == null) throw new IllegalArgumentException("Null element not allowed here!"); this.o = o; if (next != null) { this.next = next; this.prev = null; this.next.setPrev(this); System.out.println("element Node created!"); System.out.println("o= "+o +" next= " + next+" prev= "+ prev); } else System.out.println("next == null ?!!"); } public Object getO () { return o; } public Node getNext(){ return next;} public Node getPrev(){ return prev;} public void setO (Object o) { this.o = o;} public void setNext(Node next) { this.next = next;} public void setPrev(Node prev) { this.prev = prev;} ...
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ