Q
比較雙打地圖
0
A
回答
1
public class Foo {
Map<Integer, Double> data;
public Map<Integer, Double> getData() {
return data;
}
public void setData(Map<Integer, Double> data) {
this.data = data;
}
@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Foo))
return false;
Foo foo = (Foo) o;
if (this.data.size() != foo.getData().size())
return false;
Set<Integer> keySet1 = data.keySet();
Set<Integer> keySet2 = foo.getData().keySet();
// keys should same
if (keySet1.containsAll(keySet2) && keySet2.containsAll(keySet1)) {
// for the same key, the values are close
for (Integer key : keySet1) {
if (!isEntryEqual(data.get(key), foo.getData().get(key))) {
return false;
}
}
return true;
}
return false;
}
// also need to override the hashCode method
@Override
public int hashCode() {
List<Integer> keys = new ArrayList<Integer>(this.data.keySet());
return Objects.hash(keys);
}
public static final Double PRECISION = 0.0001;
private static boolean isEntryEqual(Double d1, Double d2) {
return d1 - d2 < PRECISION;
}
}
+0
缺少「hashCode()」的匹配實現。 – Axel
+0
偉大的作品就像一個魅力。 – LonsomeHell
+0
我認爲hashCode()可以縮短爲'return this.data.keySet()。hashCode()'。 – Axel
相關問題
- 1. 比較C++中的雙打
- 2. 比較兩個雙打號
- 3. xunit.net - 雙[,]比較
- 4. matlab雙比較
- 5. 雙重比較
- 6. SQL雙比較
- 7. 地圖比較值
- 8. C++地圖比較
- 9. 使用比較程序排序雙打
- 10. 它是安全的比較從雙打
- 11. iphone/Objective C - 比較雙打不工作
- 12. 比較雙打中的LINQ的IQueryable
- 13. 加速比較C++中的雙打
- 14. 雙比較問題
- 15. Java雙NaN比較
- 16. Xcode - 雙重比較
- 17. 雙比較本身
- 18. AssertJ比較雙值
- 19. 比較雙和int
- 20. 爪哇 - 雙比較
- 21. C++比較雙數
- 22. 雙比較失敗
- 23. Java雙重比較
- 24. Java地圖內容比較
- 25. 比較谷歌地圖LatLngs
- 26. 比較向量的雙重
- 27. 雙重BigDecimal,比較兩個
- 28. 雙比較 - 數字界線
- 29. 凡在這雙重比較
- 30. 雙精度比較失敗
你總是可以拿出兩者之間的差異,並檢查它是否大於容差 –
你在比較什麼?按鍵?價值?每個條目? – Nathan
你*不*執行帶有容差的'equals()'。使用另一個方法名稱。否則,你會遇到麻煩 - 從破壞hashCode()和equals()之間的契約開始(https://stackoverflow.com/questions/27581/what-issues-應該被考慮) -overriding-等於-和哈希碼,在Java的)。 – Axel