1

私は独自のバージョンの ArrayList をコーディングしようとしています (それがどのように機能するかを学ぶため)。 java.lang.ArrayListによって実装されているCloneableインターフェースを見ていました(元のバージョンと同じ契約を維持したいと思います)。

clone() メソッドの定義に少し混乱しており、誰かが私の場合にそれを明確にしてくれることを願っています。

私が本当に確信していない部分は、誰かが私のコレクションで clone() メソッドを使用した場合、新しい ArrayList を返す必要があるということです (つまり、既存のものへの参照ではありません)。でも:

  1. 含まれている各オブジェクトも複製する必要があるということですか?
  2. それらのそれぞれに対して「new」を使用して明示的に新しいインスタンスを作成する必要がありますか (これは非常に遅いはずですか?)
  3. コレクションのオブジェクトで clone() メソッドを使用しようとする必要がありますか? Cloneable の定義では明示的に必要ではない (メソッドはインターフェイスにありません) ため、それらが clone() メソッドをオーバーライドしていることを確認するにはどうすればよいですか?

助けてくれてありがとう。

4

1 に答える 1

3

コレクションのコンテキストでは、コントラクトは、オブジェクトのコピーやクローンではなく、同じオブジェクトを持つ新しいコレクションを取得することです。それ以外の場合は、契約を破ることになります。

したがって、必要なのは、要素の「浅い」コピーであり、新しいコレクション内の参照だけです。クローニング/新規で提案しているのは、非常に異なる「ディープコピー」であり、この場合はすべきではありません。

そう

  1. コレクション内の各オブジェクトのクローンを作成しないでください。
  2. 1 と同じです。new を使用しないでください。これは、コレクションの「深い」コピーを行うことになります。
  3. いいえ、1.2.と同じです。
于 2013-06-05T01:33:59.170 に答える