Search code examples
javahashmapequalshashcode

Using HashMap to count instances


I have the following code to count the instances of different strings in an array;

String words[] = {"the","cat","in","the","hat"};
HashMap<String,Integer> wordCounts = new HashMap<String,Integer>(50,10);
for(String w : words) {
    Integer i = wordCounts.get(w);
    if(i == null) wordCounts.put(w, 1);
    else wordCounts.put(w, i + 1);
}

Is this a correct way of doing it? It seems a bit long-winded for a simple task. The HashMap result is useful to me because I will be indexing it by the string.

I am worried that the line

else wordCounts.put(w, i + 1);

could be inserting a second key-value pair due to the fact that

new Integer(i).equals(new Integer(i + 1));

would be false, so two Integers would end up under the same String key bucket, right? Or have I just over-thought myself into a corner?


Solution

  • Yes you are doing it correct way. HashMap replaces values if same key is provided.

    From Java doc of HashMap#put

    Associates the specified value with the specified key in this map. If the map previously contained a mapping for the key, the old value is replaced.