【问题标题】:TreeMap with two keys具有两个键的 TreeMap
【发布时间】:2014-07-05 00:32:13
【问题描述】:
我正在制作一个简单的 2D java sidescroller,现在,我有一个 HashMap,其中我有一个类 Location 作为键,Entity 作为值。我希望能够将Entity 对象存储在TreeMap(或类似的东西)中,我将有两个键:double x 和double y。并且能够获取所有值,其中第一个键在特定数字之间,第二个键也是。到目前为止,我只找到了TreeMap,但它只允许我将 1 double 作为密钥。 Java中有没有一种方法可以实现这一点,而不必遍历每个键(就像Location一样)并检查其中的2个数字是否在指定的范围内?
【问题讨论】:
标签:
java
hashmap
multiple-columns
treemap
【解决方案1】:
虽然它并不漂亮 - 一种方法是使用 TreeMap<Double, TreeMap<Double, Entity>>。然后要获取正方形内的所有实体,您可以执行map.subMap(minX, maxX).subMap(minY, maxY).values();
【解决方案2】:
我会使用 2 个 TreeMap,一个用于 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 包含结果