나는 100 x 100의 2 차원 눈금이있는 게임을 가지고 있습니다.각 개체를 통한 검색 또는 모든 타일 블록의 메모리를위한 메모리가 더 빠릅니다.
일부 사각형에 개체를 배치했습니다. 사용자가 특정 사각형에서 무언가를 얻을 수 있기를 원한다면 매번 각 객체를 검색하거나 각 타일 및 객체 배열을 찾을 수있는 (더 적은 CPU 사용) 것이 좋을까요? 객체를 사용하여 objectArray[x][y]
나는 100 x 100의 2 차원 눈금이있는 게임을 가지고 있습니다.각 개체를 통한 검색 또는 모든 타일 블록의 메모리를위한 메모리가 더 빠릅니다.
일부 사각형에 개체를 배치했습니다. 사용자가 특정 사각형에서 무언가를 얻을 수 있기를 원한다면 매번 각 객체를 검색하거나 각 타일 및 객체 배열을 찾을 수있는 (더 적은 CPU 사용) 것이 좋을까요? 객체를 사용하여 objectArray[x][y]
그리드가 100 × 100으로 비교적 작으므로 2D 배열이 좋습니다. Point
이 x
및 y
좌표를이 곳
그리드가 크고 인구 밀도의 경우
하는Map<Point, MyObject>
는 더 나은 솔루션입니다. 이렇게하면 모든 객체를 순차적으로 스캔 할 필요없이 객체를 매우 빠르게 검색 할 수 있습니다. 당신이 당신의 자신의
Point
클래스를 구현하는 경우
것은 equals()
및 hashCode()
, 예를 구현하기 위해 기억 다음과 같은 내용 :
public final class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
@Override
public String toString() {
return "(" + this.x + "," + this.y + ")";
}
@Override
public int hashCode() {
return this.x * 127 + this.y;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Point) {
Point that = (Point) obj;
return (this.x == that.x && this.y == that.y);
}
return false;
}
}
배열 (또는 어떤 종류의 HashMap)을 사용하십시오. O (1) 액세스입니다.
O (1) 시간에 개체를 찾고 싶습니다. 그리드에 (x,y)
쌍의 위치가있는 경우 검색이 없기 때문에 개체의 2D 배열을 이길 것입니다 . 100 × 100 그리드는 현대 표준으로는 작기 때문에 속도를 높이기 위해 메모리를 사용하는 것이 좋습니다.
개체로 시작하여 표에서 좌표를 찾으려면 가장 빠른 방법은 개체가 한 번에 하나의 사각형에만있을 수 있다고 가정 할 때 개체 자체에 좌표를 저장하는 것입니다.