2016-07-09 28 views
1

Ich habe ein Spiel mit einem 100 von 100 2D Gitter.das ist schneller ein Speicher für eine Suche durch jedes Objekt oder einen Speicher für alle Kachelblöcke

Ich habe Objekte in einige der Quadrate platziert. Wenn ich möchte, dass der Benutzer etwas von einem bestimmten Quadrat bekommt, wäre es besser (benutze weniger CPU) jedes Mal durch jedes Objekt zu suchen oder ein Objekt für jede Kachel und ein Objekt-Array, in dem ich gerade finde das Objekt mit objectArray[x][y]

Antwort

0

Ihr Raster von 100 × 100 ist relativ klein, also ein 2D-Array ist der Weg zu gehen.

Wenn Ihr Gitter ist groß und dünn besiedelt, ein Map<Point, MyObject> ist eine bessere Lösung, wo Pointx und y Koordinaten hat. Dies ermöglicht weiterhin eine sehr schnelle Suche nach dem Objekt, ohne alle Objekte nacheinander durchsuchen zu müssen. Wenn Sie Ihre eigene Point Klasse implementieren, denken Sie daran, equals() und hashCode(), z. etwas wie dieses:

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

Verwenden Sie das Array (oder eine Art von HashMap). Es ist ein O (1) -Zugang.

0

Wenn Sie ein Objekt in O (1) Zeit suchen und ein (x,y) Paar seiner Position im Raster haben, wird nichts gegen ein 2D-Array von Objekten gehen, da keine Suche stattfindet . Ein 100 × 100 Raster ist nach modernen Standards winzig, so dass es eine sehr gute Nutzung des Speichers ist, um die Dinge zu beschleunigen.

Wenn Sie mit einem Objekt beginnen und seine Koordinaten auf dem Gitter finden möchten, ist der schnellste Weg, die Koordinaten auf dem Objekt selbst zu speichern, unter der Annahme, dass ein Objekt immer nur auf einem Quadrat sein kann.