我们可以为 HashMap中的 K 分配什么类型?
我们可以为 HashMap
中的 K
分配什么类型?它只是数字类型(int
、float
)还是我们可以分配用户定义的对象?
What types can we assign to K
in HashMap<K,V>
? Is it only numeric types (int
, float
) or we can assign user defined objects?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以使用任何类型,只要它具有合理的
equals()
和hashCode()
实现。严格来说:您可以使用任何引用类型,但如果该类型没有这些方法的合理实现,它将无法按预期工作。
请注意,您不能使用原始类型(
int
、float
...),但可以使用它们的包装类型(整数
、浮点
、...)。这是因为泛型只能处理引用类型。You can use any type as long as it has sane
equals()
andhashCode()
implementations.Strictly speaking: you can use any reference type, but it won't work as expected if the type doesn't have sane implementations of those methods.
Note that you can not use the primitive types (
int
,float
, ...) but can use their wrapper types instead (Integer
,Float
, ...). This is because generics can only handle reference types.您可以使用用户定义的对象,但最好在这些类中显式定义
hashCode
和equals
方法。您不能使用
int
或float
,因为它们是原始类型,不是从Object
超类(它提供的默认实现)派生的。 hashCode() 和 equals())。如果您确实需要使用整数或浮点数,则需要使用它们的对象包装类
Integer
和Float
You can user defined objects, but it is a good idea to define the
hashCode
andequals
methods explictly in those classes.You cannot use
int
orfloat
because they are primitive types that are not derived from theObject
superclass (which provides a default implementation ofhashCode()
andequals()
). If you do need to use ints or floats you need to use their object wrapper classesInteger
andFloat
您可以将任何类分配给
K
,包括其对象形式的基本类型(Integer
、Character
...)。You can assign any class to
K
, including primitive types in their object forms (Integer
,Character
...).唯一不能使用的类型是基元(和
void
),您可以使用包装类。即键和值必须是一个对象(或 null)。如果您想使用基元,我建议考虑 trove4j,它旨在有效地处理集合中的基元。
The only types you cannot use are primitives (and
void
), you can instead use wrapper class. i.e. the key and values have to be an object (or null).If you want to use primitives, I suggest considering trove4j which is designed to handle primitives in collections efficiently.
任何对象都可以用作 Key。
如果您使用用户定义的类对象作为键,请非常小心
覆盖方法 hashCode, equals。
注意使用可变对象作为键。地图的行为不是
指定对象的值是否以以下方式更改
当对象是映射中的键时,会影响等于比较。
Any object can be used as Key.
if you use user defined class object as key, be very care on
override method hashCode, equals.
take care to use mutable object as key. The behavior of a map is not
specified if the value of an object is changed in a manner that
affects equals comparisons while the object is a key in the map.