2016-07-09 5 views
1

나는 100 x 100의 2 차원 눈금이있는 게임을 가지고 있습니다.각 개체를 통한 검색 또는 모든 타일 블록의 메모리를위한 메모리가 더 빠릅니다.

일부 사각형에 개체를 배치했습니다. 사용자가 특정 사각형에서 무언가를 얻을 수 있기를 원한다면 매번 각 객체를 검색하거나 각 타일 및 객체 배열을 찾을 수있는 (더 적은 CPU 사용) 것이 좋을까요? 객체를 사용하여 objectArray[x][y]

답변

0

그리드가 100 × 100으로 비교적 작으므로 2D 배열이 좋습니다. Pointxy 좌표를이 곳

그리드가 크고 인구 밀도의 경우

하는 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; 
    } 
} 
0

배열 (또는 어떤 종류의 HashMap)을 사용하십시오. O (1) 액세스입니다.

0

O (1) 시간에 개체를 찾고 싶습니다. 그리드에 (x,y) 쌍의 위치가있는 경우 검색이 없기 때문에 개체의 2D 배열을 이길 것입니다 . 100 × 100 그리드는 현대 표준으로는 작기 때문에 속도를 높이기 위해 메모리를 사용하는 것이 좋습니다.

개체로 시작하여 표에서 좌표를 찾으려면 가장 빠른 방법은 개체가 한 번에 하나의 사각형에만있을 수 있다고 가정 할 때 개체 자체에 좌표를 저장하는 것입니다.