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