Я делаю простой 2D-скроллер на Java, и прямо сейчас у меня есть HashMap
, где у меня есть класс Location
в качестве ключа и Entity
в качестве значения. Я хочу иметь возможность хранить объекты Entity
в TreeMap
(или что-то подобное), где у меня будет 2 ключа: double x
и double y
. и иметь возможность получить все значения, где первый ключ находится между конкретными числами, а второй ключ тоже. Пока я нашел только TreeMap
, но это позволяет мне иметь только 1 дубль в качестве ключа. Есть ли способ в Java реализовать это без необходимости перебирать каждый ключ (отстой как Location
) и проверять, находятся ли в нем 2 числа в указанных пределах?
TreeMap с двумя ключами
Ответы (2)
Хотя это и некрасиво — один из способов сделать это с помощью TreeMap<Double, TreeMap<Double, Entity>>
. Затем, чтобы получить все объекты внутри квадрата, вы можете сделать map.subMap(minX, maxX).subMap(minY, maxY).values();
person
arknave
schedule
05.07.2014
Я бы использовал 2 TreeMaps, один для x и один для y:
NavigableMap<Double, Object> x = new TreeMap<>();
NavigableMap<Double, Object> y = new TreeMap<>();
Object obj1 = new Object();
x.put(2.0, obj1);
y.put(10.0, obj1);
// find objects with x between 1 and 3; y between 9 and 11
Collection<Object> c1 = x.subMap(1.0, true, 3.0, true).values();
Collection<Object> c2 = y.subMap(9.0, true, 11.0, true).values();
c1.retainAll(c2);
теперь c1 содержит результат
person
Evgeniy Dorofeev
schedule
05.07.2014