当前位置: 首页 > 面试题库 >

树状图 删除不起作用

鱼志学
2023-03-14
问题内容

我试图通过执行以下循环来获取TreeMap的前10个元素:

        TreeMap<Integer, Integer> sortedMap = sortMap(m);
        String outString = "";
        int count = 10;
        while (count > 0) {
            count--;
            Integer k = sortedMap.firstKey();
            outString += String.valueOf(k);
            sortedMap.remove(k);
            if (count != 0) {
                outString += ",";
            }
        }

        System.out.println("outVal is " + outVal);

该打印outVal is 11377,11377,11377,11377,11377,11377,11377,11377,11377,11377
Integer工具Comparable,为什么可能remove不起作用?

更新 这是我的sortMap实现:

        public static TreeMap<Integer, Integer> sortMap(HashMap<Integer, Integer> map) {
           ValueComparator bvc =  new ValueComparator(map);
           TreeMap<Integer,Integer> sorted_map = new TreeMap<Integer,Integer>(bvc);
           sorted_map.putAll(map);
           return sorted_map;
        }

class ValueComparator implements Comparator<Integer> {
    java.util.Map<Integer, Integer> base;
    public ValueComparator(java.util.Map<Integer, Integer> base) {
        this.base = base;
    }

    // Note: this comparator imposes orderings that are inconsistent with equals.    
    public int compare(Integer a, Integer b) {
        if (base.get(a) >= base.get(b)) {
            return -1;
        } else {
            return 1;
        } // returning 0 would merge keys
    }
}

更新 这很有用:Java Map按值排序。


问题答案:

public int compare(Integer a, Integer b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
} // returning 0 would merge keys
}

此比较器有缺陷,因为(除与之不一致之外equals)它不满足表示compare(a,b) > 0暗示的比较器协定,compare(b,a) < 0反之亦然。而且由于TreeMap依赖于比较器返回0来查找您要尝试找到的密钥,remove()所以它将永远无法删除任何内容-
无论您尝试使用哪种密钥并搜索映射,都永远不会认为该密钥存在。



 类似资料:
  • 这里是我试图实现的BST,但是remove方法不会删除具有给定值的节点。我试着这样做: 首先检查当前节点(我要删除的节点)是否有正确的子节点。 1.2.1)如果右子节点有一个左子节点,则我将当前节点替换为最小节点,该最小节点大于当前节点,并替换为右子树中最左侧的节点 1.2.2)如果没有,我就用它的正确子节点替换当前节点,但是代码没有删除选中的节点,哪里出错了?

  • 我试图创建一个树型组件(PrimeFaces 3.5),当它发生未选中ajax事件(取消选中该框)时,我想使用onNodeUnselect侦听器方法删除这个未选中(未选中)的树节点: XHTML 这是我的经理bean: 但我得到了下面的堆栈跟踪: 页面中什么都没有发生。更新不适用于treeNode。尽管存在堆栈跟踪和页面上的错误,但我意识到节点已删除。 我认为这个问题是由ajax中的某些东西引起的

  • 我使用的是Kafka版本0.8.2。在开发过程中,我想我可能需要删除一个主题。所以我所做的是在服务器配置文件中放入以下一行,并启动两台kafka服务器。 当我需要删除一个主题并运行以下命令时, 现在距我运行“删除主题”命令已经17个小时了,但Kafka仍在向我显示该主题已标记为删除。是Kafka的虫子还是我在这里做错了什么?因为在我看来这不正常。有人能就此澄清一下吗?

  • 我正在尝试以编程方式配置log4j2v2。11.1作为DefaultRolloverStrategy的一部分,使用新的删除操作删除旧文件。 正如您可以从下面的代码中看到的,我已将系统设置为每天创建日志文件,并在文件大小达到1MB时滚动该文件。 我尝试使用两个条件将删除操作添加到DefaultRolloverStrategy中—IfFileName和IfLastModified。IfFileName

  • 我尝试使用Registfit2.0来实现一个库系统。可以添加图书,列出所有图书信息,列出一本书信息,删除一本书,删除所有图书,更新一本书信息。 我的baseURL结尾有一个“/”: 前三个特性工作得很好: 您将在响应中看到,检查请求信息,method是“get”,但标记显示method=“delete”。 Update2:根据Dexter的建议,我添加了用于调试的HttpLoggingInterc

  • 我无法使用Hibernate JPA嵌入使cascase删除在Java EE容器管理的应用程序中工作。我们将不胜感激。我有一个实体‘公司',与其他实体有四个任何关系。当测试应用程序(使用Arquillian框架)时,我无法使级联删除工作;公司实体被删除,删除后子实体仍然存在。我读到了这里:JPA和Hibernate Cascade DELETE OneToMany不起作用,这可能是一个测试问题,所