我最近开始学习Java,虽然做了一个“Conway's Game of Life”风格的程序将是一件好事。一切工作正常,但我有这个部分的一些严重的性能问题:迭代ArrayList
coordList充满点和检查每个元素有多少邻居有当查找ArrayList中的点邻居
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;
}
的方法被使用。当列表大小达到大约10000时积分每个周期大约需要1秒,对于20000个积分需要7秒。
我的问题是,什么会是一个更有效的方法来做到这一点?我知道还有其他几种这样的源代码可用的程序,但我不会尽我所能地做我自己的事情,因为项目的关键是我学习Java。另外,由于局限性,我不想使用常规数组。
我会试试看,谢谢!关于HashSet的一个问题;它中的元素的索引是否保持不变?我计划在未来通过另外一个索引链接列表来扩展这个程序。但也许这不是做这种事的正确方法? – fredrol
这些点必须是唯一的,否则代码'coordList.contains(p)'不会给出正确数量的邻居。 – Peter
哈希集在内部使用索引,但索引在哈希集调整大小且索引未由api公开时会更改。 – Peter