【发布时间】:2013-12-01 00:45:17
【问题描述】:
我正在制作一个电子表格应用程序,并使用 HashMap 将数据存储在单元格中。作为关键,我使用的是 Point 类,它只有行数和列数。我遇到的问题是,如果我将 HashMap.get() 与新点一起使用,它会返回一个空值。
HashMap<Point, String> cache = new HashMap<Point, String>();
Point p1 = new Point(1,1);
Point p2 = new Point(2,2);
cache.put(p1, "Test: 1,1");
cache.put(p2, "Test: 2,2");
int maxRow = 2;
int maxCol = 2;
for (int i = 1; i <= maxRow; i++) {
for (int j = 1; j <= maxCol; j++) {
System.out.print(cache.get(new Point(i,j)));
if (j < maxCol)
System.out.print("\t");
if (j == maxRow)
System.out.println("");
}
}
这会返回:
null null
null null
我可能遗漏了一些明显的东西,但我自己找不到。此外,如果您碰巧知道是否有更好的数据结构来存储来自单元格的数据,我很想听听。 提前致谢!
【问题讨论】:
-
哈希码/等于为
Point类实现了吗?事实上,默认情况下,两个实例被认为是不同的,因为哈希码是基于对象的内存地址。 -
啊哈,谢谢!至少它不返回空值,但现在它在每一行上返回相同的值两次,而不是一个值和一个空值。您知道可能出了什么问题吗?
-
@ThaRemo 你测试过你的新equals方法了吗?您需要检查它是否为您认为相等的对象返回 true,以及是否为您认为不同的对象返回 false。
-
@ThaRemo 你的代码(包括我的 hashcode/equals)输出良好:
Test: 1,1 null null Test: 2,2怎么了?! -
没关系,我在 Point 构造函数中犯了一个小错误。非常感谢!