[解決済み] Java Collectionsのリストをコピーする方法
質問
私は
ArrayList
で、それをそっくりコピーしたいのです。私は、誰かが時間をかけて正しく作ったという前提で、可能な限りユーティリティクラスを使用しています。だから当然、私は最終的に
Collections
クラスがあり、その中にコピーメソッドが含まれています。
次のようなものがあったとします。
List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");
List<String> b = new ArrayList<String>(a.size());
Collections.copy(b,a);
これは、基本的に、以下のように考えているため失敗します。
b
を保持するには十分な大きさではありません。
a
. Yes I know
b
はサイズ0ですが、もう十分な大きさでしょう?もし私が
b
を先に、次に
Collections.copy()
は、私の中では全く無駄な関数になっています。そこで、コピー関数をプログラミングする以外(これからやりますが)、適切な方法はないでしょうか?
どのように解決するのですか?
呼び出し
List<String> b = new ArrayList<String>(a);
の浅いコピーを作成します。
a
の中で
b
. すべての要素は
b
の中にあったのとまったく同じ順序で
a
(順番があると仮定して)。
同様に
// note: instantiating with a.size() gives `b` enough capacity to hold everything
List<String> b = new ArrayList<String>(a.size());
Collections.copy(b, a);
の浅いコピーも作成します。
a
の中で
b
. もし最初のパラメータが
b
が十分でない場合
容量
(サイズではありません) をすべて含むことができます。
a
の要素がある場合、その要素は
IndexOutOfBoundsException
. でのアロケーションは必要ないことが予想されます。
Collections.copy
を実行し、もし実行された場合はその例外をスローします。これは、コピーされたコレクションが事前に割り当てられていることを要求するための最適化です (
b
しかし、私は一般的に、上記のようなコンストラクタに基づく代替案が奇妙な副作用がないことを考えると、必要なチェックのためにこの機能を使用する価値があるとは思いません。
ディープコピーを作成するために
List
のどちらかのメカニズムで、基礎となる型について複雑な知識を持っている必要があります。の場合
String
は、Java(と.NETも同様)では不変なので、ディープコピーさえ必要ありません。一方
MySpecialObject
そのため、ディープコピーを作成する方法を知っておく必要があります。
注:当初受理された回答は、トップリザルトである
Collections.copy
をGoogleで検索したところ、コメントで指摘されているように、全くの誤りでした。
関連
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Exceptionが発生しました エラー解決
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
org.glassfish.jersey.servlet.ServletContainer
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
Exception: java.util.NoSuchElementException: 行が見つかりません
-
IDEA パッケージステートメントの欠落
-
[解決済み] java.util.Listを別のjava.util.Listにコピーする方法