我最近開始學習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