2009-10-09 11 views
11

私は、リストをブラウズするイテレータであるJavaのLinkedListを持っています。元のイテレータの位置に関してリストの一時的な "先読み"処理を行うためにイテレータをクローンしたいと思います。Javaのイテレータをクローズする

すべての状況でイテレータのクローンを作成することはできませんが、イテレータをLinkedListに複製する(またはその状態を保存して復元する)方法はありますか?

答えて

11

Sunは(クラスをプライベートにすることで)できないことを確認しました。

でも、の代わりにlistIterator()を使用して、必要なものを達成することができます。 ListIteratorは両方向に移動できます。

+0

大丈夫です。私は先のステップの数を保存し、その状態を復元するためにその数のステップに戻ります。 –

1

ListIteratorを使用すると、次の要素のインデックスを格納でき、そのインデックスに基づいて新しいListIteratorを取得できます。このような

サムシング(Javaの1.5例):

LinkedList<Integer> list = new LinkedList<Integer>(); 
ListIterator<Integer> lit = list.listIterator(0); 
<<do something here >> 
int index = lit.nextIndex(); 
ListIterator<Integer> litclone = list.listIterator(index); 
+7

しかし、インデックスからイテレータを取得することは、リストを最初から再度参照することを意味します。基本的にC++のような他の言語のポインタを標準ライブラリと一緒に作成するのは非常に高価な方法です。 –

関連する問題