检查是否使用HashMap单击了某个位置

时间:2015-08-13 21:46:53

标签: java hashmap position mouselistener

我正在写一个简单的程序,想知道是否点击了一个大概的位置。我有一个位置为键值的哈希映射,并且如果用户点击足够接近对象的位置而想要显示当前不可见的对象 - 而不是恰好在它的位置。 position类只保存x和y值。

    HashMap<Position, Place> places = new HashMap<>(); //Assume this is populated

    @Override
    class WhatIsHere extends MouseAdapter {
        public void mouseClicked(MouseEvent me) {
            Place place = places.get(new Position(me.getX(), me.getY()));
            if (place != null) {
                place.setVisible(true);
            } else {
                System.out.println("Nothing there");
            }
        }
    }

如果您单击它就会找到该位置的代码,但我不知道如何查找,例如me.getX()+ - 10并找到该范围内的对象。

我是否需要设置四个整数,持有x-10和x + 10等,然后循环遍历中间的所有位置?这样做似乎非常愚蠢。

2 个答案:

答案 0 :(得分:0)

我不喜欢需要使用特定集合的练习,无论它是否是最佳选择。关于集合,以及更一般地说关于数据结构的最重要的事情之一是选择用于给定作业的集合。

但是,我知道你必须使用HashMap。这是一种方法。

将空间划分为小方块。通过例如识别每个方格最小x和最小y的点。创建一个HashMap,将至少一个对象附近的方块映射到附近对象列表。

要查找某个点,请计算标识包含它的方块的点。在地图中查找该点。如果它不存在,你的观点就不在任何物体附近。如果存在,请根据您的接近规则检查列表中每个对象的点。

对于对象的某些配置,您可以确保每个方块最多靠近一个对象。如果是这样,您可以用对象替换列表。

答案 1 :(得分:-1)

您可能想要使用 TreeMap ,您将能够获得一个似乎正在寻找的sub map