搜索HashMap坐标

时间:2014-11-11 02:06:03

标签: java hashmap approximate

我正在开发一个GUI应用程序。 GUI由包含城市的地图组成。每个城市都有一个X和Y坐标。城市存储在HashMap中,如下所示:

cities.put(new Coordinates(X, Y), "City Name");

其中X和Y只是代表城市中点的一些整数。如果您必须使用圆圈标记城市,则X和Y将代表该圆圈的中心。

我可以轻松获取鼠标点击的坐标。但是我的问题是我不知道如何搜索HashMap并获得最近的城市。没有人能够完美地点击特定的X和特定的Y坐标。所以我必须允许像+ - 15。

1 个答案:

答案 0 :(得分:1)

将地图划分为网格,以便可以从网格中的某个点计算任何网格方块的左上角坐标。

例如,如果地图是100 x 100并且您希望它包含10个网格方格乘以10个网格方格,则任何网格方格的左上角坐标都是:

top = y - y%10;
left = x - x%10;

然后,您的地图将是:

Map<Coordinates, City>

其中City是一个包含城市名称和实际坐标的对象(不是网格坐标)。

如果要查找附近的城市,请计算所点击位置的网格坐标,并将其用作地图的关键字。

如果网格中有多个城市,则地图的值必须是City个对象的列表。

编辑:这也可以通过使用类似的网格数学原理对.equals()类的哈希码和Coordinates方法做一些诡计来解决。