如何在同时访问新的ArrayList项目时删除旧的ArrayList项目

时间:2016-06-13 23:17:22

标签: arraylist processing

我有一个读取文本文件的程序,将某些对象添加到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()

1 个答案:

答案 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();
  }
}