【问题标题】:Having a hashmap add 1 for each instance of a string in an array.有一个 hashmap 为数组中的每个字符串实例添加 1。
【发布时间】:2026-02-14 17:20:04
【问题描述】:

我的hashmap类如下:

public HashMap<String, Integer> getWordCounts() {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    String[] quoteOne = getWordArray();
    for (String stuff : quoteOne) {
        map.put(stuff, +1);
    }
    return map;
}

当它通过quoteOne时,我希望它将数组中的每个单词放入哈希图中,但对于重复项,将整数加1。例如“如果你看到这个你很酷”将作为

放入哈希图中
if  1
you 2
see 1
this 1
are 1
cool 1

但是我的代码和你一起把它放到了 hashmap 中 1. 有什么问题?

【问题讨论】:

  • 我没看出有什么问题吗?
  • 当我输入上面指示的短语时,我希望它具有上述输出,但我得到的输出是 (if 1) (you 1) (see 1) (this 1) (are 1 ) (酷 1)

标签: java arrays foreach hashmap


【解决方案1】:

在您的代码中,对于您看到的每个单词,您都输入 +1(正 1 的 int 值)。

您需要更新该值,而不是覆盖它。

for (String stuff : quoteOne) {
    Integer oldVal = map.get(stuff);
    if (oldVal == null) {
        oldVal = 0;
    }
    map.put(stuff, oldVal+1);
}

【讨论】:

    【解决方案2】:

    你的 for 循环将是

     for (String stuff : quoteOne) {
         if(map.get(stuff) != null){
              int i = map.get(stuff);
              map.put(stuff,i+1)
            }else{
               map.put(stuff, 1);
               }
            }
    

    【讨论】:

      【解决方案3】:

      如果提供了相同的键,HashMap 会替换值。

      来自 HashMap#put 的 Java 文档

      将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

      试试这样的

      for(String w : words) {
          Integer i = wordCounts.get(w);
          if(i == null) wordCounts.put(w, 1);
          else wordCounts.put(w, i + 1);
      }
      

      【讨论】:

        【解决方案4】:
                for(String i: quoteOne)
                    map.put(i, (map.get(i)!=null)? map.get(i)+1:1);
        

        【讨论】:

        • 您是否介意添加一些说明,说明为什么这样做会起作用,而提问者的示例却不起作用?