2016-05-09 5 views
-2

listIterator.next()はディープコピーかシャローコピーを返しますか?私は、コードの一部を以下している

ListIterator iterator = resultSet.listIterator(); 
while (iterator.hasNext()) { 
    Object[] data = (Object[]) iterator.next(); 

} 

私はちょうどiterator.next()メソッドは、resultSetか浅いの次の項目の深いコピーを返すかどうかを知りたいですか?

+0

これは、 'resultSet'のタイプが何であるかによって異なります。 – Eran

+0

@Eran 'resultSet'が' List'だと思うのはかなり安全だと思います。 – dasblinkenlight

+1

@ dasblinkenlightしかし、リストの実装がどれであるかはわかりません(ディープ・コピーが返されるとはわかりませんが、実装されていないわけではありません)。 – Eran

答えて

2

resultSetが標準JavaライブラリのListの実装であるとすると、「深いまたは浅いコピー」の質問に対する回答は「どちらもない」です。 ListIteratorList標準Javaライブラリのクラスはコピーを返しません。 参照を返すので、Listに格納されているオブジェクトにアクセスします。そのコピーはコピーしません。

Java配列は変更可能なので、ループ内でループがdataになる変更は、リスト内に格納されたObject[]配列で行われます。

ListListIteratorが唯一のインターフェイスであるため、Eranが正しく、彼のコメントで指摘したように、実際の要素にリストの要素ではなく、参照のコピーを返す実装を思い付くために全く考えられます。これらのコピーは、自分の実装に応じて、深くても浅くてもかまいません。ただし、Javaライブラリによって提供されるリスト実装は、常に実際のリスト要素への参照を返します。

関連する問題