为什么Hashmap值类型需要double []但不是double?

问题描述:

我正在开发一个java应用程序,我在其中使用Hashmap,其中字符串作为键和双作为值,但我知道Hashmap不能将原始类型视为泛型,但它可能需要double []。为什么Hashmap值类型需要double []但不是double?

+7

由于'双[]'是引用类型(它的Object'的'的子类),而不是一个原始的。 –

+1

'double'是原始的,'double []'不是。 – Maroun

+0

另请参见[数组是基本类型还是对象](https://*.com/a/12807748/8051589)。 –

所有阵列在Java对象,包括原始类型的数组。

这意味着您可以将它们用作泛型类型参数(而原语不能使用),例如List元素或Map值。他们可以站在任何你需要的地方Object

但要注意,数组没有的equalshashCode“正确”的实现,进而使可怕键在Map是罚款)。

+0

equals或hashCode的“正确”实现:或者'toString'。 'java.util.Array'提供所有这些作为静态帮助器方法,但是数组本身不派遣。 – Thilo

+0

我会说“有用”或“直觉”而不是“恰当”:它们是正确的,因为它们存在并可以像任何其他方式一样被调用。 –

+0

我把“适当”放在引号中作为妥协。但是默认的实现并不是非常有用,并且在这个网站上引发了很多问题,所以我必须坚持认为它们有些破碎(并且如果语言被重新设计,可能会做这些帮助方法所做的)。 – Thilo

因为它是原始的,所以不能使用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");