これはより理論的な問題です。c
順序付けられていない任意のコレクションがあり、2 回java.util.Iterator
呼び出して 2 つのを取得c.iterator()
した場合、両方のイテレータがc
の要素を同じ順序で返す必要がありますか?
つまり、実際にはおそらく常にそうするでしょうが、契約によってそうするように強制されているのでしょうか?
ありがとう、ヤン
これはより理論的な問題です。c
順序付けられていない任意のコレクションがあり、2 回java.util.Iterator
呼び出して 2 つのを取得c.iterator()
した場合、両方のイテレータがc
の要素を同じ順序で返す必要がありますか?
つまり、実際にはおそらく常にそうするでしょうが、契約によってそうするように強制されているのでしょうか?
ありがとう、ヤン
いいえそうではありません。
「要素が返される順序に関する保証はありません(このコレクションが保証を提供するクラスのインスタンスでない限り)。」
Collection#iterator API コントラクトを参照してください。
これには、あるイテレータから次のイテレータまでが含まれます (それを要求することについては何も述べていないため)。
また、これら 2 つの反復子を取得する間に、基になるコレクションで何かが変更された可能性があることも考慮してください。追加または削除されたもの。
Iterator の実装は、特定の Collection クラスによって提供されます。リストのイテレータは順序付けられた要素を提供しますが、セットは提供しません
ほとんどのデータ構造はデフォルトでは順序付けされていないため、同じ順序で反復されるかどうかは不明です。
同じ順序が必要な場合は、最初にコレクションを並べ替える必要があります。