初始化对象和super.clone()之间的区别

时间:2019-05-08 19:22:31

标签: java data-structures clone

我正在上数据结构课程,我正在尝试编写一个DoublyLinked列表及其自己的方法。在我的书中,我看到了这段代码。代码(1)和代码(2)之间有什么区别吗?如果可以,我应该使用哪一个?

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

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

1 个答案:

答案 0 :(得分:-1)

这取决于在DoublyLinkedList的实现构造函数和超类的方法“ clone”中编写的内容。您可以不同地或同等地做到这一点。

如果使用工具“列表”,则必须编写自己的方法克隆。 “ LincedList”具有自己的方法。

请阅读以下文章: Java克隆:复制构造函数与克隆 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]

相关问题