我有一个读取文本文件的程序,将某些对象添加到ArrayList,然后稍后访问它们以显示对象。但是,文件非常大(850万行),因此是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()
。
答案 0 :(得分:1)
如果您想要强制执行尺寸,请说10
,那么只要您向ArrayList
添加内容,就可以进行检查:
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();
}
}