複数のイテレータを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. そこにはイテレータとループが人形の中にありますか?
- 3. 1つのキーから複数の値への関係を可能にするJavaコレクションがありますか?
- 4. Javaでは、時間の経過後に要素を取ることができるコレクションがありますか?
- 5. 整数のリストのイテレータを指定すると、偶数のイテレータを返す方法はありますか?
- 6. 複数のアクションがあるボタンはありますか?
- 7. コンマが重複していることはありますか?
- 8. Excelの画像コレクションのドキュメントはどこにありますか?
- 9. `str.split()`と同等の遅延/イテレータがありますか?
- 10. 複数の分析パッケージを使用することが問題になることはありますか?
- 11. PHP $ _POST変数が空であることがあります
- 12. Javaコレクションにはコレクションフレームワークの一部としてのマップがありません
- 13. Javaでスレッドが遅れることはありませんか?
- 14. 複数のアプレットが1つのjarファイルにあり、複数のアプレットが1ページにありますか?
- 15. STL出力イテレータに相当するC#はありますか?
- 16. この行には何がありますか? (java)
- 17. 1つの列に複数の変数がありますか?
- 18. この行にマーカーが複数ある
- 19. PHPでは複数の戻り値がありますか?
- 20. マスターページ複数のコンテンツがあります
- 21. 複数のレイアウトがあります
- 22. NUnitはプロパティがコレクションであることを確認します
- 23. Java 6が必要なアプレットはどこにありますか?
- 24. このJava関数に何らかの弱点がありますか?
- 25. MariaDB 10.1+には変数の配列/コレクション型がありますか?
- 26. ViewModel内にある複合型内のコレクションにリストボックスをバインドする方法はありますか?
- 27. Java - 数値ゲーム - 複数のActionListenerが同じクラスにあります
- 28. バックボーンモデルコンストラクタの2番目の引数にコレクションを渡すことは適切な場合はありますか?
- 29. ハッシュ関数djb2にはjavaバージョンがありますか?
- 30. このトリムコードが失敗することはありますか?
を? –