TreeMap有两把钥匙

时间:2014-07-05 00:32:14

标签: java hashmap multiple-columns treemap

我正在创建一个简单的2D java sidescroller,现在,我有一个HashMap,其中我有一个类Location作为键,Entity作为值。我希望能够将Entity个对象存储在TreeMap(或类似的)中,我将拥有2个密钥:double xdouble y。并且能够获得所有值,其中第一个键在特定数字之间,第二个键也在第二个键之间。到目前为止我只找到TreeMap,但它只允许我有1个双键作为键。有没有一种方法在Java中实现,而不必遍历每个键,(吮吸为Location)并检查其中的2个数字是否在指定的范围内?

2 个答案:

答案 0 :(得分:2)

虽然它并不漂亮 - 一种方法是使用TreeMap<Double, TreeMap<Double, Entity>>。然后,要获得正方形内的所有实体,您可以执行map.subMap(minX, maxX).subMap(minY, maxY).values();

答案 1 :(得分:2)

我会使用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包含结果