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

在Java中的Map中计算键的出现次数

锺离辰沛
2023-03-14
问题内容

我正在编写一个项目,该项目从.java文件中捕获Java关键字,并使用地图跟踪事件的发生。过去,我已经成功地使用了类似的方法,但是我似乎无法为我的预期用途采用这种方法。

    Map<String,Integer> map = new TreeMap<String,Integer>();
    Set<String> keywordSet = new HashSet<String>(Arrays.asList(keywords));
    Scanner input = new Scanner(file);
    int counter = 0;
    while (input.hasNext())
    {
        String key = input.next();
        if (key.length() > 0)
        {
            if (keywordSet.contains(key))
            {
                map.put(key, 1);
                counter++;
            }

                if(map.containsKey(key)) <--tried inner loop here, failed
                {
                    int value = map.get(key);
                    value++;
                    map.put(key, value);
                }

        }

该代码块应该将关键字添加到键,并在每次出现相同的键时递增该值。到目前为止,它添加了关键字,但是未能正确增加该值。这是一个示例输出:

{assert=2, class=2, continue=2, default=2, else=2, ...}

基本上,它会增加映射中的每个值,而不是应该增加的值。我不确定我是否对此考虑过多。我尝试了一个内循环,它给了我疯狂的结果。我真的希望我对此有所考虑。任何帮助是极大的赞赏!


问题答案:

对于您扫描的每个键,您都会在地图中创建一个新条目(覆盖现有条目)。然后,下一个条件成立,因此您将计数增加1,达到值2。

内部应该是这样的:

        if (keywordSet.contains(key))
        {
            Integer value = map.get(key);
            if (value == null)
                value = 0;
            value++;
            map.put(key, value);
        }

无论如何,请考虑使用某种可变的整数来使其更有效。您将不必覆盖地图中的条目,也不必进行过多的Integer装箱操作。



 类似资料:
  • 我正在尝试获取每分钟出现数据的次数。日期看起来是这样的。第一个数字是一个整数,表示自Unix纪元以来的秒数,我将其转换为ISO 8601时间。第二个数字是双精度的。以“00”结尾的时间代表第0分钟,以“60”结尾的时间代表第1分钟。 代码: 我的输出是这样的: 但我正在寻找类似下面的东西(忽略新的分钟找到的文本) 我如何调整它,以便我跟踪当前分钟并添加到计数器,而不会过早地打印出计数器?

  • 问题内容: 我正在尝试计算中每行显示的数字,例如: 行显示3次。 一个简单的天真的解决方案将涉及将我所有的行都转换为元组,然后应用,如下所示: 产生: 但是,我担心我的方法的效率。也许有一个提供此功能的内置库。我将此问题标记为,因为我认为它可能具有我正在寻找的工具。 问题答案: 您可以使用另一个问题的答案来获得唯一项目的计数。 使用结构化数组的另一种选择是使用一种void类型的视图,该视图将整行连

  • 我已经将代码中的read整数修复为不再是I而是一个单独的变量“index”,并理解为什么我会收到Over Ofbound异常,但我有点厚,不明白如何在添加哨兵值0的同时修复它。

  • 问题内容: 我有一个重复条目的单词。 我想计算并保存数据结构中每个单词的出现次数。 我该怎么做? 问题答案: 如果您没有大量的字符串,最短的实现方法是使用方法,如下所示: 输出:

  • 我需要返回一个字典,该字典计算预定列表中每个字母出现的次数。问题是我需要把大小写字母都算成一样,所以我不能用.low或.uper。 因此,例如,如果“t”是要搜索的字母,“This is a Python String”应该返回{nt':3}。 这是我目前所掌握的... 其中'letters'是条件,fullText是我正在搜索的字符串。 这里很明显的问题是,如果测试是“t”而不是“t”,我的代码

  • 问题内容: 计算单词在文件中出现的次数的简便方法是什么? 问题答案: 这还将在单行中计算单词的多次出现: