我正在尋找一個Map實現,它可以根據鍵和比較器進行排序。Sorted Map with not defined defined Comparators
我知道TreeMap
是要走的路,但我有一個很大的問題:比較器沒有很好的定義(我知道是一個錯誤,但我目前無法修復),它甚至返回0對於不相等的鍵(按照equals()方法)。
樹形圖實現假定對象是相等的(且因此覆蓋值)如果比較器返回0並沒有考慮哈希碼或對象的equals方法考慮。這是記錄在案,並在大多數情況下所需的行爲。您可以檢查的實施是基於比較通過查看TreeMap.put()方法,它包含以下snipset:
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
此代碼遍歷樹,如果它發現樹中的一個節點,其(使用比較器cpr
)與應插入的值(key
)相同時,該值將被覆蓋。
但是:我在尋找的Map接口的實現是基於一個比較器進行排序,但不使用它用於檢測相等。
你在地圖上放置了一些你的類或java類嗎? – 2013-04-10 07:53:11
對於鍵和值:我的類 – theomega 2013-04-10 07:54:58
就我所知,map是由Sets實現的,並且object是否在set中,由對象本身的hashCode()確定,而不是由比較器的equals確定,所以爲什麼TreeMap是不工作? – 2013-04-10 08:01:46