TreeMap с двумя ключами

Я делаю простой 2D-скроллер на Java, и прямо сейчас у меня есть HashMap, где у меня есть класс Location в качестве ключа и Entity в качестве значения. Я хочу иметь возможность хранить объекты Entity в TreeMap (или что-то подобное), где у меня будет 2 ключа: double x и double y. и иметь возможность получить все значения, где первый ключ находится между конкретными числами, а второй ключ тоже. Пока я нашел только TreeMap, но это позволяет мне иметь только 1 дубль в качестве ключа. Есть ли способ в Java реализовать это без необходимости перебирать каждый ключ (отстой как Location) и проверять, находятся ли в нем 2 числа в указанных пределах?


person Victor2748    schedule 05.07.2014    source источник


Ответы (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