gpt4 book ai didi

java - 在 map 中,按一个字段排序并按另一个字段删除元素?

转载 作者:行者123 更新时间:2023-12-01 14:13:06 27 4
gpt4 key购买 nike

假设有 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());
}
}

现在 map 实例化将如下所示:NavigableMap<Key, Value> myMap = new TreeMap<>(new SortComparator());我想要的是在 map 内部,条目仅按 keySort 排序。并仅根据 keyRemove 删除它们.

问题是,当我尝试从 map 中删除元素时,只有 keyRemove值,它不能按预期工作(比较器中的 NullPointerException)。如何修复上述实现以便实现预期行为,或者如何以其他方式实现预期行为?

编辑:我明白出了什么问题;对于替代方案,问题仍然存在。来自 TreeMap Java文档:

Note that the ordering maintained by a sorted map (whether or not an explicit comparator is provided) must be consistent with equals if this sorted map is to correctly implement the Map interface. (See Comparable or Comparator for a precise definition of consistent with equals.)

最佳答案

我认为,当您想要删除 map 中的条目时,remove 方法将基于 equals 方法完成这项工作:(key==null ? k==null : key.equals(k))就像这里描述的http://docs.oracle.com/javase/6/docs/api/java/util/AbstractMap.html#remove%28java.lang.Object%29 .

一种解决方案是通过迭代键集中中的所有键来实现您自己的删除方法 - 搜索removeKey,但这会将 O(1) 复杂度替换为 O(n )。也许这对您来说是一个解决方法。

关于java - 在 map 中,按一个字段排序并按另一个字段删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com