複数のイテレータを1つのコレクションにまとめ、それぞれを独立して追跡することは可能ですか?これは、イテレータが割り当てられた後に、削除または挿入がないと仮定しています。コレクションにJavaのイテレータが複数あることはありますか?
答えて
はい。
回答が30文字でなければならないことがあります。
合意。 Javaはスレッドを自動的に生成して同期化しますか? –
@cp:反復子はスレッドと無関係です。どんなスレッドもあなたによって行われなければなりません。 – ColinD
したがって、1つのコレクションの2つのイテレーターを作成した場合、それらは別々のスレッドにはなく、挿入/削除は使用されません。 –
はい、可能です。それがコレクションの単なるメソッドではなくイテレータである理由の1つです。
たとえば、List
イテレータ(AbstractList
で定義)は、イテレータの現在のインデックスにint
を保持します。複数のイテレータを作成してnext()
を異なる回数呼び出すと、それぞれの値は異なる値のint cursor
になります。
同時収集では、挿入と削除があっても、異なるスレッドに複数のイテレータを持つことができます。
はい、いいえ。それはインターフェイスIterable<T>
の実装に依存します。
通常、それは反復処理可能なインタフェースを実装するクラスの新しいインスタンスを返す必要があり、クラスAbstractListはそのようにこれを実装しています
public Iterator<E> iterator() {
return new Itr(); //Where Itr is an internal private class that implement Itrable<T>
}
あなたはあなたが、これはこのように行われることを期待して、標準のJavaクラスを使用している場合。
それ以外の場合は、iterator()
というオブジェクトを呼び出すことで簡単にテストを実行し、最初に実行してから2番目のものを実行し、2番目のものが依存する場合は結果を生成しません。しかし、これは可能性はほとんどありません。
あなたはこのような何か行うことができます:あなたがしようとしたときに何が起こった
import java.util.ArrayList;
import java.util.Iterator;
public class Miterate {
abstract class IteratorCaster<E> implements Iterable<E>, Iterator<E> {
int mIteratorIndex = 0;
public boolean hasNext() {
return mStorage.size() > mIteratorIndex;
}
public void remove() {
}
public Iterator<E> iterator() {
return this;
}
}
class FloatCast extends IteratorCaster<Float> {
public Float next() {
Float tFloat = Float.parseFloat((String)mStorage.get(mIteratorIndex));
mIteratorIndex ++;
return tFloat;
}
}
class StringCast extends IteratorCaster<String> {
public String next() {
String tString = (String)mStorage.get(mIteratorIndex);
mIteratorIndex ++;
return tString;
}
}
class IntegerCast extends IteratorCaster<Integer> {
public Integer next() {
Integer tInteger = Integer.parseInt((String)mStorage.get(mIteratorIndex));
mIteratorIndex ++;
return tInteger;
}
}
ArrayList<Object> mStorage;
StringCast mSC;
IntegerCast mIC;
FloatCast mFC;
Miterate() {
mStorage = new ArrayList<Object>();
mSC = new StringCast();
mIC = new IntegerCast();
mFC = new FloatCast();
mStorage.add(new String("1"));
mStorage.add(new String("2"));
mStorage.add(new String("3"));
}
Iterable<String> getStringIterator() {
return mSC;
}
Iterable<Integer> getIntegerIterator() {
return mIC;
}
Iterable<Float> getFloatIterator() {
return mFC;
}
public static void main(String[] args) {
Miterate tMiterate = new Miterate();
for (String tString : tMiterate.getStringIterator()) {
System.out.println(tString);
}
for (Integer tInteger : tMiterate.getIntegerIterator()) {
System.out.println(tInteger);
}
for (Float tFloat : tMiterate.getFloatIterator()) {
System.out.println(tFloat);
}
}
}
- 1. コレクションとイテレータの間に循環依存関係はありますか?
- 2. Javaこの行に複数のマーカーがあります
- 3. そこにはイテレータとループが人形の中にありますか?
- 4. コレクションにはJavaScriptがありますか?
- 5. 1つのキーから複数の値への関係を可能にするJavaコレクションがありますか?
- 6. Javaでは、時間の経過後に要素を取ることができるコレクションがありますか?
- 7. 整数のリストのイテレータを指定すると、偶数のイテレータを返す方法はありますか?
- 8. 複数のアクションがあるボタンはありますか?
- 9. 未解決のUNNotificationRequestが複数存在することはありますか?
- 10. Excelの画像コレクションのドキュメントはどこにありますか?
- 11. `str.split()`と同等の遅延/イテレータがありますか?
- 12. Pythonの関数とリストはどこにある必要がありますか?
- 13. 1つのループ内に複数のメソッドがありますJava
- 14. コンマが重複していることはありますか?
- 15. Postgres:複数列のsubselectではどこにありますか?
- 16. 複数のユニットテストファイルがありますか
- 17. 複数の分析パッケージを使用することが問題になることはありますか?
- 18. イテレータの値をローカル変数に格納する方法はありますか?
- 19. Javaでスレッドが遅れることはありませんか?
- 20. リストをメモリの観点からイテレータに変換することは意味がありますか?
- 21. Javaコレクションにはコレクションフレームワークの一部としてのマップがありません
- 22. STL出力イテレータに相当するC#はありますか?
- 23. イテレータをコンテナにマップする方法はありますか?
- 24. Javaジェネリック "コレクションに同じ消去があります"エラー
- 25. PHP $ _POST変数が空であることがあります
- 26. この行には何がありますか? (java)
- 27. Djangoアプリには複数のデータベースと複数のユーザがあります
- 28. 複数のアプレットが1つのjarファイルにあり、複数のアプレットが1ページにありますか?
- 29. Javaには、1日のグローバル変数がありますか?
- 30. Javaパッケージとクラスはどこにありますか?
を? –