『Effective Java, 2nd Edition, Item 11』では、次のディープ コピーの例を見つけることができます。
public class HashTable implements Cloneable {
private Entry[] buckets = ...;
private static class Entry {
final Object key;
Object value;
Entry next;
Entry(Object key, Object value, Entry next) {
this.key = key;
this.value = value;
this.next = next;
}
// Recursively copy the linked list headed by this Entry
Entry deepCopy() {
return new Entry(key, value,
next == null ? null : next.deepCopy());
}
}
@Override public HashTable clone() {
try {
HashTable result = (HashTable) super.clone();
result.buckets = new Entry[buckets.length];
for (int i = 0; i < buckets.length; i++)
if (buckets[i] != null)
result.buckets[i] = buckets[i].deepCopy();
return result;
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
これがどのようにディープ コピーを作成するのか理解できません。キーと値はオブジェクトであるため、プリミティブ型はありません。だから私の理解では、
// Recursively copy the linked list headed by this Entry
Entry deepCopy() {
return new Entry(key, value,
next == null ? null : next.deepCopy());
}
Entry
元のキーと値への参照を使用して新しいを作成しEntry
ますか?
ディープ コピーとは基本的に、プリミティブ型に到達するまで下に移動し、それらをクローンにコピーすることを意味するのではないでしょうか?
これに関するヒントをありがとう!