19

我有一个Queueq1,它被实现为 a LinkedList,我想定义一个Queueq2,它是一个单独但相同的Queueq1 实例。

Queue由于没有实施,我该怎么做Cloneable

4

3 回答 3

25

在一个班轮中:

new LinkedList<>(myQueue);

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

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

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

于 2014-04-10T08:08:19.907 回答
5

您可以使用迭代器:

Iterator<Integer> it = q1.iterator();
while(it.hasNext())  {
   q2.add(it.next());
}
于 2014-04-10T08:11:45.040 回答
3

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

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

否则

    Queue q2 = q1.getClass().newInstance();
    for(Object e : q1) {
        q2.add(e);
    }
于 2014-04-10T08:09:39.177 回答