java - 排序后的 map 不允许删除

标签 java dictionary

我之前搜索过一种根据值对 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/

相关文章:

java - 部署在 TomCat 上时,我的 Angular + Spring 应用程序路由不起作用

python - 修改一个 Python "requests"模块响应对象

c# - 在 C# 中迭代​​字典

python - 使用 Python 从三维数组构建字典

c++ - 在 C++ 中从字典文件创建 map 的 map

arrays - 使用 Swift 包含多个键值的字典

Java: "attempting to assign weaker access privilege error"(使用 1.8 编译 JDK 1.6 源代码)

java - 在 Java 中将 UUID 编码为 Base62(而非 Base64)

java - 如何通过 BlueCoat 代理连接 Java 应用程序?

java - 获取JTable的真实选定值