Hashmap不适用于int,char

64 java hashmap

可能重复:
在Java集合中存储原始值?

在java中我使用以下内容: -

public HashMap<char, int> buildMap(String letters)
{
    HashMap<char, int> checkSum = new HashMap<char, int>();

    for ( int i = 0; i < letters.length(); ++i )
    {
        checkSum.put(letters.charAt(i), primes[i]);
    }

    return checkSum;
}
Run Code Online (Sandbox Code Playgroud)

我收到与不适当类型有关的错误.我分别使用Character和Integer而不是char和int解决了我的问题.但是,我无法弄清楚为什么HashMap无法处理原始数据类型.

Mik*_*uel 120

通用参数只能绑定到引用类型,而不是基本类型,因此您需要使用相应的包装器类型.试试吧HashMap<Character, Integer>.

但是,我无法弄清楚为什么HashMap无法处理原始数据类型.

这是由于类型擦除.Java从一开始就没有泛型,所以a HashMap<Character, Integer>真的是一个HashMap<Object, Object>.编译器会执行一系列额外的检查和隐式转换,以确保您不会输入错误类型的值或输出错误的类型,但在运行时只有一个HashMap类,它存储对象.

其他语言的"特殊化"类型在C++中,a vector<bool>vector<my_class>内部非常不同,它们没有共同的vector<?>超类型.Java定义了一些东西,因此无论与向前通用代码的向后兼容性是什么,a List<T> 都是一样的 .这种向后兼容性要求必须为泛型类型的所有参数化提供单个实现类,这防止了允许泛型参数绑定到基元的模板特化类型.ListT


Sri*_*ati 13

泛型不能以关键字的形式使用原始类型.

使用

public HashMap<Character, Integer> buildMap(String letters)
{
    HashMap<Character, Integer> checkSum = new HashMap<Character, Integer>();

    for ( int i = 0; i < letters.length(); ++i )
    {
        checkSum.put(letters.charAt(i), primes[i]);
    }

    return checkSum;
}
Run Code Online (Sandbox Code Playgroud)