我们可以在HashMap中为K分配哪些类型<k,v>?</k,v>

时间:2011-09-21 08:05:21

标签: java hashmap

我们可以在K中为HashMap<K,V>分配哪些类型?它只是数字类型(intfloat)还是我们可以分配用户定义的对象?

5 个答案:

答案 0 :(得分:10)

只要具有合理的equals()hashCode()实施,您就可以使用任何类型。

严格来说:您可以使用任何引用类型,但如果该类型没有这些方法的合理实现,它将无法按预期工作。

请注意,您不能使用基元类型(intfloat,...),但可以使用其包装类型(IntegerFloat,......)。这是因为泛型只能处理引用类型。

答案 1 :(得分:6)

您可以使用用户定义的对象,但最好在这些类中明确定义hashCodeequals方法。

您不能使用intfloat,因为它们是不是从Object超类派生的基本类型(它提供hashCode()和{{1的默认实现}})。如果确实需要使用整数或浮点数,则需要使用其对象包装类equals()Integer

答案 2 :(得分:2)

您可以将任何类分配给K,包括其对象形式中的基本类型(IntegerCharacter ...)。

答案 3 :(得分:1)

您不能使用的唯一类型是基元(和void),您可以改为使用包装类。即键和值必须是一个对象(或null)。

如果你想使用原语,我建议考虑使用trove4j来有效处理集合中的原语。

答案 4 :(得分:0)

任何对象都可以用作Key。

  1. 如果您使用用户定义的类对象作为键,请非常小心 覆盖方法hashCode,等于。

  2. 注意使用可变对象作为键。地图的行为不是 指定是否以某种方式更改对象的值 当对象是地图中的关键时,影响等于比较。