我之前搜索过一种根据值对 TreeMaps 进行排序的方法,能够找到一个可以做到这一点的函数,但现在似乎 remove() 方法有问题,尝试了各种不同的方法来使用键删除,但是它不起作用,说实话我不完全理解排序功能,有人可以解释一下问题是什么吗?
代码:
public static void main(String[] args) {
TreeMap<String,Integer> theTree = new TreeMap<String,Integer>();
theTree.put("A", 5);
theTree.put("B", 3);
theTree.put("F", 1);
theTree.put("D", 5);
theTree.put("E", 6);
theTree.put("C", 7);
System.out.println(theTree.toString());
Map<String,Integer> sortedTree = new TreeMap<String,Integer>();
sortedTree = sortByValues(theTree);
System.out.println(sortedTree.toString());
for (Map.Entry<String, Integer> entry : sortedTree.entrySet())
{
if(entry.getKey().equals("A"))
sortedTree.remove(entry.getKey());
}
System.out.println(sortedTree.toString());
theTree = new TreeMap<String,Integer>(sortedTree);
theTree.remove("B");
System.out.println(theTree.toString());
}
public static <K, V extends Comparable<V>> Map<K, V> sortByValues(final Map<K, V> map) {
Comparator<K> valueComparator = new Comparator<K>() {
public int compare(K k1, K k2) {
int compare = map.get(k2).compareTo(map.get(k1));
if (compare == 0) return 1;
else return compare;
}
};
Map<K, V> sortedByValues = new TreeMap<K, V>(valueComparator);
sortedByValues.putAll(map);
return sortedByValues;
}
输出:
{A=5, B=3, C=7, D=5, E=6, F=1}
{C=7, E=6, A=5, D=5, B=3, F=1}
{C=7, E=6, A=5, D=5, B=3, F=1}
{A=5, C=7, D=5, E=6, F=1}
A 仍在 map 中
最佳答案
在你的比较器中,你正在删除它返回 0 的任何机会 (if (compare == 0)return 1
) 因此,当你去删除时,你输入的值永远不会有任何机会等于集合中的值并且不会删除任何内容。如果没有特殊原因要消除它们被视为相等的机会,只需从比较器中删除该行即可。
关于java - 排序后的 map 不允许删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189544/