21

I have a Queue q1, that is implemented as a LinkedList, and I want to define a Queue q2, that is a separate, but identical identical instance of Queue q1.

How do I do that since Queue does not implement Cloneable?

MahNas92
  • 327
  • 1
  • 17
Razer
  • 7,843
  • 16
  • 55
  • 103

3 Answers3

28

In a one liner:

new LinkedList<>(myQueue);

Since Queue extends Collection, and collections have a constructor that takes another Collection, this is a quick way to do a shallow clone.

Substitute LinkedList with your own Queue implementation if you wish.

Also, read the javadocs. They have all the answers.

Kayaman
  • 72,141
  • 5
  • 83
  • 121
5

you can use an iterator :

Iterator<Integer> it = q1.iterator();
while(it.hasNext())  {
   q2.add(it.next());
}
mherbert
  • 515
  • 3
  • 12
2

If q1 is one of JCF implementations of Queue like ArrayQueue etc are Cloneable you can use

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

otherwise

    Queue q2 = q1.getClass().newInstance();
    for(Object e : q1) {
        q2.add(e);
    }
Evgeniy Dorofeev
  • 133,369
  • 30
  • 199
  • 275