基于键值的值范围

时间:2014-12-31 00:25:24

标签: java algorithm hashmap 2d

我试图实现一种搜索大量2D点的方法,以获得与某个范围相匹配的点。我正在考虑为<X, Point><Y, Point>创建HashMaps,但我想知道HashMap是否适合这样做,因为我会根据x_min中的值来获取范围内的点数到x_max和y_min到y_max。

所以我基本上会把<X,Point>搜索的所有点从x_min搜索到x_max,然后将它们与从{_ 1}从y_min到y_max的点数进行比较......

<Y,Point>

是否有更快的方法从HashMap或其他类型的数据结构中获取一系列值?

2 个答案:

答案 0 :(得分:1)

TreeMap更好,因为它支持许多功能,如地板,更高,更低,天花板等。  多亏了它,您可以创建一个地图TreeMap<Integer,Point> coordinates = new TreeMap<Integer,Point>();,然后查询您感兴趣的坐标。请注意,TreeMap根据其键的natural ordering或在地图创建时提供的Comparator进行排序。

如果您正在寻找更复杂的搜索查询,请查看quad-tree

答案 1 :(得分:1)

实际上我找到了一个解决方案:

TreeMap<Integer, TreeMap<Integer, Integer>> values;
for (int x : values.subMap(x_min, x_max).keySet()) {
        for (int y : values.get(x).subMap(y_min, y_max).values()) {
            // y here, represents the value of points in range...
        }
    }