我试图将一个BasicRectangle对象的集合存储在一个hashmap中(它包含在BasicRectangleCollection类中。该键是一个包含整数字段x和y的对象。 我然后使用方法"找到"检索它,只需获取x和y值并将它们转换为Key对象。但是,当我跑步时,发现"然后它返回null并且我不明白为什么当我正在寻找的对象绝对存在时会发生这种情况......
相关代码:
HashMap<Key,BasicRectangle> rectangles;
public BasicRectangleCollection(BasicRectangle bRect){
this.rectangles = new HashMap<>();
int x = bRect.getX();
int y = bRect.getY();
rectangles.put(new Key(x,y), bRect);
}
@Override
public BasicRectangle find(int x, int y) {
return rectangles.get(new Key(x,y));
}
public static void main(String[] args) {
BasicRectangle rectangle= new BasicRectangle(0,0,5,5);
BasicRectangleCollection collection = new BasicRectangleCollection(rectangle);
BasicRectangle found = collection.find(0,0);
System.out.println(found);
}
答案 0 :(得分:1)
您是否为Key和BasicRectangleCollection实现了hashCode和equals?
如果没有,我认为Java使用内存中的对象引用作为哈希码,这意味着除非两个对象是同一个实例,否则它们不相等,并且您的搜索将无法按预期工作。