Разница между инициализацией объекта и super.clone () - PullRequest
0 голосов
/ 08 мая 2019

Я изучаю структуру данных и пытаюсь закодировать список DoublyLinked и его собственный метод. В моей книге я видел этот код. Есть ли разница между кодом (1) и кодом (2).Если да, то какой мне следует использовать?

DoublyLinkedList<E> other=(DoublyLinkedList<E>) super.clone(); //code (1)

DoublyLinkedList<E> other=new DoublyLinkedList<>();//code (2)

1 Ответ

0 голосов
/ 08 мая 2019

Зависит от того, что написать в конструкторе реализации DoublyLinkedList и методе «клон» суперкласса.Вы можете сделать это по-разному или одинаково.

Если вы используете инструмент «Список», вы должны написать собственный метод clone.У «LincedList» есть собственный метод.

И прочитайте, если хотите, эту статью: Java Cloning: копирование конструкторов и клонирование https://dzone.com/articles/java-cloning-copy-constructor-vs-cloning

import java.util.ArrayList;
import java.util.stream.IntStream;

public class Clonetest implements Cloneable{

    ArrayList<Integer> ints = new ArrayList<>();

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Clonetest clA = new Clonetest();
        IntStream.range(0,10).forEach(value -> clA.ints.add(value)); //add Integers
        System.out.println(clA.ints);

        clA.ints.removeIf(integer -> integer % 2 > 0); //remove part in clA.ints

        Clonetest clB = (Clonetest) clA.clone();
        System.out.println(clB.ints);
        System.out.println(clB.ints.equals(clA.ints));
    }
}

Результаты:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8]
true

...