私は、リストをブラウズするイテレータであるJavaのLinkedListを持っています。元のイテレータの位置に関してリストの一時的な "先読み"処理を行うためにイテレータをクローンしたいと思います。Javaのイテレータをクローズする
すべての状況でイテレータのクローンを作成することはできませんが、イテレータをLinkedListに複製する(またはその状態を保存して復元する)方法はありますか?
私は、リストをブラウズするイテレータであるJavaのLinkedListを持っています。元のイテレータの位置に関してリストの一時的な "先読み"処理を行うためにイテレータをクローンしたいと思います。Javaのイテレータをクローズする
すべての状況でイテレータのクローンを作成することはできませんが、イテレータをLinkedListに複製する(またはその状態を保存して復元する)方法はありますか?
Sunは(クラスをプライベートにすることで)できないことを確認しました。
でも、の代わりにlistIterator()
を使用して、必要なものを達成することができます。 ListIterator
は両方向に移動できます。
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);
しかし、インデックスからイテレータを取得することは、リストを最初から再度参照することを意味します。基本的にC++のような他の言語のポインタを標準ライブラリと一緒に作成するのは非常に高価な方法です。 –
大丈夫です。私は先のステップの数を保存し、その状態を復元するためにその数のステップに戻ります。 –