ArrayListを使用してオブジェクトを順番に格納しています(各オブジェクトは整数形式で一意のIDを持ちます)。 ID。だから私は、Iteratorが、私が理解する限り線形的にリストにアクセスするための方法ではなく、検索のサイズと頻度を考慮して、これは実行可能ではないと判断しました。同期リストの削除(バイナリ検索)と反復処理
これはマルチスレッド環境であり、別のスレッドが内容を変更(削除または追加)したいときに、リストが(順序どおりに)反復される可能性があることです。私は、同期化されたアプローチを使用しようとしましたが、次の状況が今でもConcurrentModificationExceptionを引き起こしていることがわかりました。
ArrayList<Object> list = new ArrayList<>();
public synchronized void removeFromList(int index)
{
list.remove(index);
}
public synchronized void addToList(Object o)
{
list.add(o);
}
public synchronized int findByID(int ID)
{
//search for item in list
}
public void paint(Graphics g)
{
synchronized(list)
{
for(Object o : list)
{
o.render(g);
}
}
}
実際に塗装する方法はSwingのものです。私の最終的な実装ではSwingは関係しませんが、これは有用なテスト環境です。私は後の実装のためにマルチスレッドソリューションが必要になります。
同期についての私の理解にスポットが当てられているかどうかはわかりませんが、私は最後の数日間、それを一緒にまとめようと必死にしています。誰にも私の直近の問題を解決する方法や、より深いリソースへのリンク(小さな小説のサイズはすごいです!)を教えてください。
ああ、そのシグネチャがその内部のリソースではなく、これを同期させることになることは間違いありませんでした。大変ありがとうございました!私は、改訂されたコードでいくつかのテストを行い、まだ例外が発生するかどうかを確認します。 – Stevo
テストの後、私はConcurrentModificationExceptionを新しいコードと共に表示することができませんでした。しかし、私が持っていたものに戻って例外を持ち出すので、情報に非常に感謝します、それはトリックでした! – Stevo
あなたは大歓迎です:) – hfhc2