我试图实现一种搜索大量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或其他类型的数据结构中获取一系列值?
答案 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...
}
}