我正在寻找可以根据其键和比较器进行排序的 Map 实现。
我知道这TreeMap
是要走的路,但我有一个很大的问题:比较器没有很好地定义(我知道这是一个错误,但我目前无法修复它)即使对于不是的键它也返回 0相等(就 equals() 方法而言)。
如果比较器返回 0 并且不考虑对象的 hashCode 或 equals 方法,则 TreeMap 实现假定对象相等(并因此覆盖值)。这是记录在案的,并且在大多数情况下是所需的行为。您可以通过查看 TreeMap.put() 方法来检查实现是否基于比较器,该方法包含以下片段:
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 接口的实现,它基于 Comparator 进行排序,但不使用它来检测哪些是相等的。