Storing primitive values in a Java collection?
public HashMap<char, int> buildMap(String letters)
HashMap<char, int> checkSum = new HashMap<char, int>();
for ( int i = 0; i < letters.length(); ++i )
Generic parameters can only bind to reference types, not primitive types, so you need to use the corresponding wrapper types. Try
HashMap<Character, Integer> instead.
However, I'm having trouble figuring out why HashMap fails to be able to deal with primitive data types.
This is due to type erasure. Java didn't have generics from the beginning so a
HashMap<Character, Integer> is really a
HashMap<Object, Object>. The compiler does a bunch of additional checks and implicit casts to make sure you don't put the wrong type of value in or get the wrong type out, but at runtime there is only one
HashMap class and it stores objects.
Other languages "specialize" types so in C++, a
vector<bool> is very different from a
vector<my_class> internally and they share no common
vector<?> super-type. Java defines things though so that a
List<T> is a
List regardless of what
T is for backwards compatibility with pre-generic code. This backwards-compatibility requirement that there has to be a single implementation class for all parameterizations of a generic type prevents the kind of template specialization which would allow generic parameters to bind to primitives.