【发布时间】:2012-11-10 18:42:36
【问题描述】:
我最近开始学习 Java,虽然做一个“Conway's Game of Life”风格的程序会是一个很好的开始。一切正常,但我在这部分遇到了一些严重的性能问题:
static List<Point> coordList = new ArrayList<Point>();
public int neighbors(int x, int y){
int n = 0;
Point[] tempArray = { new Point(x-1, y-1), new Point(x, y-1), new Point(x+1, y-1),
new Point(x-1, y ), new Point(x+1, y ),
new Point(x-1, y+1), new Point(x, y+1), new Point(x+1, y+1)};
for (Point p : tempArray) {
if (coordList.contains(p))
n++;
}
return n;
}
当迭代填充有 Points 的ArrayList coordList 并检查每个元素有多少邻居时使用该方法。当列表大小达到大约 10000 Points 时,每个周期大约需要 1 秒,而 20000 点需要 7 秒。
我的问题是,什么是更有效的方法来做到这一点?我知道还有其他一些类似的程序也有可用的源代码,但我不想自己做尽可能多的事情,因为该项目的重点是我学习 Java。另外,由于限制,我不想使用常规数组。
【问题讨论】:
标签: java list arraylist iteration