3

java.util.StackJavaでコピーする適切な方法を探しています。

Stackコピーコンストラクターがないようです。ドキュメントで見つけたのは、cloneメソッドだけです。

しかし、私が書くと

Stack<Integer> stack = (Stack<Integer>) oldstack.clone();

コンパイラは、チェックされていない型について警告を出します。

コピーするための「適切な」方法はありStackますか?そうでなければ、ここで最も賢明なことは何でしょうか?警告を出さないほうがいいのですが、値を繰り返してコピーするのは少しばかげていると感じます(ただし、後者が最も賢明な方法であることが判明する場合があります)。

4

2 に答える 2

10

あなたは使うことができますaddAll、私は推測します:

Stack<Integer> stack = new Stack();
stack.addAll(oldStack);

ただし、ドキュメントには、StackクラスよりもDequeを使用する必要があると記載されており、すぐに必要なものがあります。

Deque<Integer> stack = new ArrayDeque<Integer>(oldStack);
于 2012-07-21T08:29:43.877 に答える
0

を使用しても問題はありませんclone。コンパイラは、未処理の(チェックされていない)例外があるというエラーを出しますCloneNotSupportedException。これは、Javaとそのチェックされた例外の標準的な話であり、を使用しない理由ではありませんclone。メカニズム全体cloneが今日では古風なものと見なされており、実際にはJavaの標準ライブラリ内の最も古いクラスによってのみ実装されていることは事実ですが、これらのクラスでは機能し、他のクラスよりもパフォーマンスが高いという潜在的なボーナスがあります(ネイティブメモリコピー)。

于 2012-07-21T12:52:41.177 に答える