2016-06-13 8 views
0

テキストファイルを読み込み、特定のオブジェクトをArrayListに追加してから、オブジェクトに表示するために後でアクセスするプログラムがあります。しかし、ファイルは非常に大きく(850万行)、ArrayList(これは実行するとすぐにプログラムがハングする原因になると思われます)。新しいArrayListアイテムに同時にアクセスしながら古いArrayListアイテムを削除する方法

私は古い項目を削除したいと思いますArrayListを新しいものにアクセスしている間、ArrayListを小さく保つことができます。現在のコードでは機能していないようですが、これはArrayListの古い項目を削除する正しい方法ですか?

void drawPoints() { 
    for (int i = 0; i < places.size(); i++) { 
    places.get(i).placeCoordinate(); 
    places.get(i).fadeCoordinate(); 
     if (i >= 1) { 
     places.remove(i - 1); 
     } 
    } 
} 

いくつかの注意:ここで

は、関連するコードです

  • placesは、この時点でファイルからのオブジェクトで満たされるべきであるとのArrayListです。

  • drawPoints()という関数がメインのdraw()ループで呼び出されます。

答えて

1

あなたが施行したいサイズを持っている場合、あなたは単にあなたがArrayListに何か追加するたびにチェックを行うことができます、の10を言わせて:

ArrayList<Thing> list = new ArrayList<Thing>(); 

list.add(thing); 

if(list.size() == 10){ 
    list.remove(0); //removes the oldest thing 
} 

するか、あなたが本当にしたい場合ArrayListをループしている間に物を取り除くには、単純に後ろにループして、インデックスのシフトがループ変数に干渉しないようにすることができます:

for (int i = places.size()-1; i >= 0; i--) { 
    places.get(i).placeCoordinate(); 
    places.get(i).fadeCoordinate(); 
     if (i >= 1) { 
     places.remove(i - 1); 
     } 
    } 

それとも、Iteratorを使用することができます。

ArrayList<Thing> list = new ArrayList<Thing>(); 

//create your Iterator 
Iterator<Thing> iterator = list.iterator(); 

//loop over every Thing in the ArrayList 
while(iterator.hasNext()){ 
    Thing thing = iterator.next(); 

    thing.doSomething(); 

    if(thing.shouldBeRemoved()){ 
    //Iterator allows you to remove stuff without messing up your loop 
    iterator.remove(); 
    } 
} 
関連する問題