Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在地图中,按一个字段排序并按另一个字段删除元素?_Java_Collections_Map_Tree - Fatal编程技术网

Java 在地图中,按一个字段排序并按另一个字段删除元素?

Java 在地图中,按一个字段排序并按另一个字段删除元素?,java,collections,map,tree,Java,Collections,Map,Tree,假设存在NavigableMap,其中键将是: class Key { private String keySort; private String keyRemove; //getters, setters etc. @Override public boolean equals(Object o) { //only include keyRemove } @Override public int hashC

假设存在
NavigableMap
,其中
键将是:

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());
    }    
}
类SortComparator实现Comparator{
@凌驾
公共整数比较(键o1,键o2){
返回o1.getKeySort().compareTo(o2.getKeySort());
}    
}
现在映射实例化如下所示:
NavigableMap myMap=newtreemap(new-SortComparator())
我想要的是在地图中包含仅按
键排序的条目,并仅根据
keyRemove
删除它们

问题是,当我试图从映射中删除元素时,只有
keyRemove
值,它不能按预期工作(
NullPointerException
在Comparator中)。如何修复上述实现以使用预期行为,或者如何以其他方式实现预期行为

编辑:我知道怎么了;问题仍然存在,寻找替代方案。从
TreeMap
JavaDoc:

请注意,排序由排序映射维护(无论是否为 如果提供了显式比较器,则必须与equals一致 此排序映射用于正确实现映射接口。(见 可比比较器,用于精确定义符合 相等。)


我认为,当您要删除映射中的条目时,remove方法将基于equals方法执行此操作:
(key==null?k==null:key.equals(k))
就像这里描述的

一种解决方案是通过迭代键集中的所有键来实现自己的remove方法——搜索removeKey,但这将用O(n)替换O(1)复杂性。也许这对你来说是个解决办法