2011-09-21 30 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. 小心使用可变对象作为关键。如果在对象是地图中的键时以 影响等于比较的方式更改对象的值,则映射的行为不是 。

相关问题