为什么Hashmap值类型需要double []但不是double?
问题描述:
我正在开发一个java应用程序,我在其中使用Hashmap,其中字符串作为键和双作为值,但我知道Hashmap不能将原始类型视为泛型,但它可能需要double []。为什么Hashmap值类型需要double []但不是double?
答
所有阵列在Java对象,包括原始类型的数组。
这意味着您可以将它们用作泛型类型参数(而原语不能使用),例如List
元素或Map
值。他们可以站在任何你需要的地方Object
。
但要注意,数组没有的equals
或hashCode
“正确”的实现,进而使可怕键在Map
(值是罚款)。
答
因为它是原始的,所以不能使用double
。但是,您可以改用Double
。
有关更多详细信息,请参阅以下问题。
Why can Java Collections not directly store Primitives types?
答
不能使用原始类型(int,boolean,double等)作为映射键或值。但是每个基本类型都有一个包装类(int - Integer,double - Double等),您可以使用它们。
由于Java 1.5原始值的为包装对象转换是自动的(这就是所谓的自动装箱/拆箱):
Map<String, Double> m = new HashMap<>();
m.add("a", 1.0);
double a = m.get("a");
由于'双[]'是引用类型(它的Object'的'的子类),而不是一个原始的。 –
'double'是原始的,'double []'不是。 – Maroun
另请参见[数组是基本类型还是对象](https://*.com/a/12807748/8051589)。 –