2017-08-24 165 views
2

我正在開發一個java應用程序,我在其中使用Hashmap,其中字符串作爲鍵和雙作爲值,但我知道Hashmap不能將原始類型視爲泛型,但它可能需要double []。爲什麼Hashmap值類型需要double []但不是double?

+7

由於'雙[]'是引用類型(它的Object'的'的子類),而不是一個原始的。 –

+1

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

+0

另請參見[數組是基本類型還是對象](https://stackoverflow.com/a/12807748/8051589)。 –

回答

4

所有陣列在Java對象,包括原始類型的數組。

這意味着您可以將它們用作泛型類型參數(而原語不能使用),例如List元素或Map值。他們可以站在任何你需要的地方Object

但要注意,數組沒有的equalshashCode「正確」的實現,進而使可怕鍵在Map是罰款)。

+0

equals或hashCode的「正確」實現:或者'toString'。 'java.util.Array'提供所有這些作爲靜態幫助器方法,但是數組本身不派遣。 – Thilo

+0

我會說「有用」或「直覺」而不是「恰當」:它們是正確的,因爲它們存在並可以像任何其他方式一樣被調用。 –

+0

我把「適當」放在引號中作爲妥協。但是默認的實現並不是非常有用,並且在這個網站上引發了很多問題,所以我必須堅持認爲它們有些破碎(並且如果語言被重新設計,可能會做這些幫助方法所做的)。 – Thilo

-1

不能使用原始類型(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"); 
相關問題