假设在NavigableMap<Key, Value>
哪里Key
:
class Key {
private String keySort;
private String keyRemove;
//getters, setters etc.
@Override
public boolean equals(Object o) {
//only include keyRemove
}
@Override
public int hashCode() {
//only include keyRemove
}
}
还有一个比较器:
class SortComparator implements Comparator<Key> {
@Override
public int compare(Key o1, Key o2) {
return o1.getKeySort().compareTo(o2.getKeySort());
}
}
现在地图实例化看起来像这样:NavigableMap<Key, Value> myMap = new TreeMap<>(new SortComparator());
我想要的是在地图内部,条目仅按 排序,keySort
并且仅基于keyRemove
.
问题是当我尝试从地图中删除元素时,只有keyRemove
值,它不能按预期工作(NullPointerException
在比较器中)。如何修复上述实现以使用预期的行为,或者如何以其他方式实现预期的行为?
编辑:我明白出了什么问题;对于替代方案,问题仍然存在。来自TreeMap
JavaDoc:
请注意,如果该排序映射要正确实现 Map 接口,则排序映射维护的排序(无论是否提供显式比较器)必须与 equals 一致。(有关与等于一致的精确定义,请参见 Comparable 或 Comparator。)