저는 최근에 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 초가 걸립니다.
내 질문은 무엇이 더 효과적인 방법일까요? 내가 사용할 수있는 소스 코드와 함께 이런 종류의 다른 프로그램이 몇 가지있다는 것을 알고 있지만, 프로젝트의 시점부터 자바를 배우는 것이기 때문에 나는 할 수있는 한 많이하지 않는다. 또한 제한 때문에 일반 배열을 사용하고 싶지 않습니다.
감사합니다. HashSet에 관한 한 가지 질문. 그 안에있는 요소의 색인은 일정하게 유지됩니까? 나는 색인으로 연결된 객체의 또 다른 목록을 가지고 미래에 프로그램을 확장 할 계획이었습니다. 하지만 아마도 그런 일을하는 적절한 방법이 아니겠습니까? – fredrol
포인트는 uniqe이어야합니다. 그렇지 않으면 코드'coordList.contains (p)'가 정확한 수의 이웃을 제공하지 않습니다. – Peter
해시 세트는 내부적으로 인덱스를 사용하지만 해시 세트의 크기가 조정되고 인덱스가 API에 의해 노출되지 않으면 인덱스가 변경됩니다. – Peter