Я делаю простой двумерный Java-прокруткой, и прямо сейчас у меня есть HashMap
где у меня есть класс Location
в качестве ключа, а Entity
как значение. Я хочу иметь возможность хранить объекты Entity
в TreeMap
(или что-то подобное), где у меня будет два ключа: double x
и double y
. и иметь возможность получать все значения, где первый ключ находится между конкретными числами и вторым ключом. До сих пор я только нашел TreeMap
, но это только позволяет мне иметь 1 двойной ключ. Есть ли способ в Java реализовать это без необходимости прокручивать каждый ключ (сосать как Location
) и проверять, находятся ли 2 числа в нем в указанных границах?
Хотя это не очень - один из способов сделать это - с TreeMap<Double, TreeMap<Double, Entity>>
. Затем, чтобы получить все объекты в квадрате, вы можете сделать map.subMap(minX, maxX).subMap(minY, maxY).values();
Я бы использовал 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 содержит результат