java - 通过 HashMap 坐标搜索

标签 java hashmap approximate

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

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

其中 X 和 Y 只是代表城市中点的一些整数。就像您必须用一个圆圈标记一个城市一样,X 和 Y 将代表该圆圈的中心。

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

最佳答案

将您的 map 划分为一个网格,以便可以从网格内的一个点计算出任何网格正方形的左上角坐标。

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

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

那么,您的 map 将是:

Map<Coordinates, City>

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

当你想找到附近的城市时,计算点击位置的网格坐标,并将其用作 map 的键。

如果您在一个网格中有多个城市,您的 map 的值将需要是一个 City 对象的列表。

编辑:这也可以通过使用网格数学的类似原理对 Coordinates 类的 hashcode 和 .equals() 方法进行一些欺骗来解决。

关于java - 通过 HashMap 坐标搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26856336/

相关文章:

java - StringBuffer 可以用作 HashMap 中的键吗?

java - 用于近似字符串匹配的示例 java 代码或用于近似字符串匹配的 boyer-moore 扩展

string - 名称的近似字符串匹配算法

java - 远程运行 spark 作业

java - 如何在Java中将字符串转换为大写和小写?

java - 通过 TCP 将 Java int 发送到 C

c++ - QHash : Any weak spots performance-wise, 除了重新哈希?为什么不?

java - 如何从 HashMap 或 LinkedHashMap 中获取有限数量的值?

java - Lucene/Solr 用于近似(公司)名称匹配

Java DES 加密、C# DES 解密