2011-09-21 108 views

回答

10

只要具有健全的equals()hashCode()實現,您可以使用任何類型。

嚴格地說:你可以使用任何參考類型,但如果類型不具有的那些方法理智的實施預期將無法正常工作。

請注意,您不能使用基本類型(intfloat,...),但可以使用它們的包裝類型,而不是(IntegerFloat,...)。這是因爲泛型只能處理引用類型。

+0

偉大的思想認爲一致:) – Matthew

6

您可以使用用戶定義的對象,但最好在這些類中明確定義hashCodeequals方法。

不能使用intfloat,因爲它們是不會從Object超類(提供的hashCode()equals()默認實現)派生的基本類型。如果確實需要使用整數和浮點數,你需要使用它們的對象包裝類IntegerFloat

2

您可以將任何類分配給K,包括原始類型的對象形式(IntegerCharacter ...)。

1

您不能使用的唯一類型是基元(和void),您可以改爲使用包裝類。即密鑰和值必須是一個對象(或null)。

如果你想使用基元,我建議考慮trove4j,它被設計來有效地處理集合中的基元。

0

任何對象都可以用作Key。

  1. 如果使用用戶定義的類對象作爲重點,是對 覆蓋方法的hashCode非常關心,等於。

  2. 小心使用可變對象作爲關鍵。如果在對象是地圖中的鍵時以 影響等於比較的方式更改對象的值,則映射的行爲不是 。

相關問題