如何在Java中复制或克隆一个使用LinkedList实现的队列?

21

我有一个用LinkedList实现的队列q1,我想定义一个与q1分开但完全相同的队列q2

由于Queue没有实现Cloneable,我该如何实现?

3个回答

29
在一条语句中:
new LinkedList<>(myQueue);
由于Queue extends Collection,且集合有一个以另一个Collection为参数的构造函数,因此这是进行浅克隆的快速方法。如果需要可以用自己的Queue实现替换LinkedList。另外,请阅读Java文档,它们拥有所有答案。

4
使用 new LinkedList<MyObject>(myQueue); 可以实现将一个名为 myQueue 的队列转换为 LinkedList 并存储在新的 LinkedList 对象中。 - nos
1
你说得对,我很蠢。队列扩展了集合。 - Kayaman

5

您可以使用迭代器:

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

2
如果q1是JCF队列实现(如ArrayQueue等)中的一个,那么它是可克隆的,您可以使用它。
    Queue q2 = ((Cloneable)q1).clone();

否则
    Queue q2 = q1.getClass().newInstance();
    for(Object e : q1) {
        q2.add(e);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接