Java - 从ConcurrentHashMap中的等效键获取值

时间:2016-11-10 08:00:35

标签: java dictionary hashmap concurrenthashmap

对于此代码:

    //...
    System.out.println(Main.getCurrentPage().getDots()); //Type: ConcurrentHashMap<Point,String>
    System.out.println(mdp.getActivePoint()); //Type: Point
    System.out.println(Main.getRealCurrentPage().getDots().get(mdp.getActivePoint())); //Type: String
    //...

我得到了这个输出:

{java.awt.Point[x=278,y=354]=A1, java.awt.Point[x=542,y=370]=A1}
java.awt.Point[x=278,y=354]
null

我不明白为什么这个输出的第三行不是

A1

因为第二行输出中打印的点包含在地图的键集中。

我认为这是因为出于某种原因它们并没有被视为同一个对象/引用,所以我创建了一个扩展ConcurrentHashMap的类:

public class GoodCHashMap<K,V> extends ConcurrentHashMap<K,V>{

    public GoodCHashMap(){
        super();
    }

    public GoodCHashMap(GoodCHashMap<K,V> m){
        super(m);
    }

    @Override
    public V get(Object key){
        if(key instanceof Point){
            //System.out.println("!!!! hit");
            Point point = (Point) key;
            for(Object o : keySet()){
                Point p = (Point) o;
                if(point.x == p.x && point.y == p.y){
                    //System.out.println("This was a thing");
                    return super.get(p);
                }
            }
            return null;
        }else{
            return super.get(key);
        }
    }
}

这是为了将Point传递给get方法,它迭代自己的keySet,如果Point与参数的坐标相同,则使用默认ConcurrentHashMap中的keyset中的Point。得到方法。但是,这也失败了。

任何人都可以帮助我理解并克服这种行为吗?

0 个答案:

没有答案