我们可以在K
中为HashMap<K,V>
分配哪些类型?它只是数字类型(int
,float
)还是我们可以分配用户定义的对象?
答案 0 :(得分:10)
只要具有合理的equals()
和hashCode()
实施,您就可以使用任何类型。
严格来说:您可以使用任何引用类型,但如果该类型没有这些方法的合理实现,它将无法按预期工作。
请注意,您不能使用基元类型(int
,float
,...),但可以使用其包装类型(Integer
, Float
,......)。这是因为泛型只能处理引用类型。
答案 1 :(得分:6)
您可以使用用户定义的对象,但最好在这些类中明确定义hashCode
和equals
方法。
您不能使用int
或float
,因为它们是不是从Object
超类派生的基本类型(它提供hashCode()
和{{1的默认实现}})。如果确实需要使用整数或浮点数,则需要使用其对象包装类equals()
和Integer
答案 2 :(得分:2)
您可以将任何类分配给K
,包括其对象形式中的基本类型(Integer
,Character
...)。
答案 3 :(得分:1)
您不能使用的唯一类型是基元(和void
),您可以改为使用包装类。即键和值必须是一个对象(或null)。
如果你想使用原语,我建议考虑使用trove4j来有效处理集合中的原语。
答案 4 :(得分:0)
任何对象都可以用作Key。
如果您使用用户定义的类对象作为键,请非常小心 覆盖方法hashCode,等于。
注意使用可变对象作为键。地图的行为不是 指定是否以某种方式更改对象的值 当对象是地图中的关键时,影响等于比较。