1 回答

TA貢獻1836條經驗 獲得超5個贊
哈希圖中的每個條目都被覆蓋...
我懷疑你不太明白它是如何HashMap
工作的。 HashMap
存儲對非副本的引用。key
我懷疑您在Intersection
將其放入地圖后會覆蓋其中的字段。這是一個非常糟糕的模式,可能會導致一些非常奇怪的結果。
有幾件事要檢查。
你應該
new Intersection(avenue, street)
每次都做。考慮在您的
Intersection
be中創建 2 個字段final
。這始終是一個很好的模式,因此您不會無意中更改鍵的值。確定其中一個或兩個字段是否是“身份”字段,它應該是final
.您需要確保
Intersection
對象具有正確識別每個值的適當方法hashcode()
。equals()
否則,每個Intersection
都將存儲在地圖中,無論它們是否具有相同的avenue
和street
值。在這里查看我的答案:https ://stackoverflow.com/a/9739583/179850您應該從地圖中獲取交叉點的計數,然后增加該值。
也許是這樣的:
Intersection key = new Intersection(8, 42);
...
Integer count = hashMap.get(key);
if (count == null) {
hashMap.put(key, 1);
} else {
hashMap.put(key, value + 1);
}
...
public class Intersection {
// these fields can't be changed
private final int avenue;
private final int street;
...
添加回答
舉報