web-dev-qa-db-ja.com

Javaでリンクリスト実装キューをコピーまたは複製するにはどうすればよいですか?

Queue q1があり、これはLinkedListとして実装されています。Queue q2を定義したいのですが、これはQueue q1。

QueueCloneableを実装していないので、どうすればよいですか?

17
Razer

ワンライナーで:

new LinkedList<>(myQueue);

Queue extends Collection、およびコレクションには、別のCollectionを取るコンストラクターがあります。これは、浅いクローンを作成する迅速な方法です。

必要に応じて、LinkedListを独自のQueue実装に置き換えます。

また、javadocsもお読みください。彼らはすべての答えを持っています。

21
Kayaman

Q1がArrayQueueなどのQueueのJCF実装の1つである場合、Cloneableを使用できます。

    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());
}
3
mherbert