編集:回答を含む情報を更新
コレクションのさまざまなコピー方法の全体像を把握しようとしています。私は概念を理解していると思いますが、丸めが必要であり、そのような要約が必要です (私の投稿を自由に変更してください)。私は持っている:
コレクション a、b。//ジェネリックは省略
では、コレクションをコピーする可能性はどのくらいですか?:
割り当て (まったく同じオブジェクト)
a=b
浅いコピー (2 つの diff コレクション、同じオブジェクト参照、したがって、1 つのリストから 1 つのオブジェクトを追加/削除しても、他のリストには反映されません)
a = new ArrayList(b); // Or any other implementation of Collections a = b.clone(); //This also? b = new ArrayList(); //This also? for (Object o : a) b.add(a);
レイジーコピー (Java の浅いと同じ?)
ディープ コピー (オブジェクトがコピーされた別のリスト。1 つのリストまたはオブジェクトを変更しても、他のリストには影響しません)
b = new ArrayList(); // Or any other implementation of Collections for (Object o : a) b.add(o.clone());
だから私はこれらのケースを想像します:
コレクションのコピー/複製 (または DAO データの返却)
SyncStateOfListing OriginalListingSafe OriginalObjectsStateSafe
Mutual aware of changs
**********************
Assignment in other var y - Mirrored n n
Iterator* y - Concurrnt.Exc n (remove()) n
New is aware of old´ changes (RO ProxyView)
******************************************
Coll.unmodifiableColl(orig) y - Mirrored** y NotSuppOpExc on RW n
Coll.unmodif(orig).iterator()* y - Concurrnt.Exc y NotSuppOpExc on RW n
Enum y - ? y No RW methods
Independent copies
******************
Shallow Copy n y n
Deep Copy n y y (expensive)
* Iterator we force to regenerate it in any use and we get Exceptions if at some moment the snapshot is obsolete, so we assure the state for which the operation is meant, transactionally. Cannot add elements or retraverse.
** The "new" collection is totally mirrored for any change on the original, but internally, inner iterator is always used when traversing (the obvious stateful operation) so we get the same properties as when using it
私の仮定でよろしいですか?