2016-07-09 4 views
1

У меня есть игра с сеткой 100 на 100 2d., который быстрее запоминает поиск по каждому объекту или память для всех блоков плитки

Я разместил объекты на некоторых площадях. Если бы я хотел, чтобы пользователь мог получить что-то с определенного квадрата, было бы лучше (использовать меньше процессора) каждый раз искать каждый объект или иметь объект для каждого фрагмента и массив объектов, в котором я могу просто найти объект с помощью objectArray[x][y]

ответ

0

Ваша сетка 100 × 100 относительно невелика, поэтому 2D-массив - это путь.

Если сетка большая и малонаселенная, Map<Point, MyObject> является лучшим решением, где Point имеет x и y координаты. Это все равно позволит очень быстро найти объект, без необходимости последовательно сканировать все объекты.

Если вы внесете свой собственный класс 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) раз, и у вас есть пара его местоположения в сетке, ничто не будет бить 2D-массив объектов, потому что поиск не происходит , Сетка 100 × 100 является крошечной по современным стандартам, поэтому это очень хорошее использование памяти для ускорения работы.

Если вы хотите начать с объекта и найти его координаты на сетке, самый быстрый подход - сохранить координаты на самом объекте, предполагая, что объект может находиться только на одном квадрате в любой момент времени.