如何在 Java 中复制或克隆链表实现队列?

Posted

技术标签:

【中文标题】如何在 Java 中复制或克隆链表实现队列?【英文标题】:How do I copy or clone a LinkedList-implemented Queue in Java? 【发布时间】:2014-05-23 19:30:09 【问题描述】:

我有一个Queue q1,它被实现为LinkedList,我想定义一个Queue q2,它是Queue q1 的一个单独但完全相同的实例。

既然Queue 没有实现Cloneable,我该怎么做?

【问题讨论】:

【参考方案1】:

在一个班轮中:

new LinkedList<>(myQueue);

由于Queue extends Collection 和集合有一个构造函数,该构造函数接受另一个Collection,这是进行浅层克隆的快速方法。

如果您愿意,可以用您自己的 Queue 实现替换 LinkedList

另外,请阅读 javadocs。他们有所有的答案。

【讨论】:

new LinkedList(myQueue);应该做 你说得对,我是个白痴。队列扩展集合。【参考方案2】:

如果 q1 是队列的 JCF 实现之一,比如 ArrayQueue 等是可克隆的,您可以使用

    Queue q2 = ((Cloneable)q1).clone();

否则

    Queue q2 = q1.getClass().newInstance();
    for(Object e : q1) 
        q2.add(e);
    

【讨论】:

【参考方案3】:

你可以使用迭代器:

Iterator<Integer> it = q1.iterator();
while(it.hasNext())  
   q2.add(it.next());

【讨论】:

以上是关于如何在 Java 中复制或克隆链表实现队列?的主要内容,如果未能解决你的问题,请参考以下文章

在java中,如何复制一个对象?比如说string对象

如何在不使用复制或克隆的情况下克隆Rust中的结构?

如何在 C++ 中克隆对象?或者还有其他解决方案吗?

如何在 kotlin 中克隆或复制列表

Java 集合深入理解 :LinkedList链表源码研究,及双向队列如何实现

Java源码系列之LinkedList