我们可以为 HashMap中的 K 分配什么类型?

发布于 2024-12-05 16:24:16 字数 130 浏览 0 评论 0原文

我们可以为 HashMap 中的 K 分配什么类型?它只是数字类型(intfloat)还是我们可以分配用户定义的对象?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

爱的故事 2024-12-12 16:24:16

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

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

请注意,您不能使用原始类型(intfloat...),但可以使用它们的包装类型(整数浮点、...)。这是因为泛型只能处理引用类型。

You can use any type as long as it has sane equals() and hashCode() 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.

黄昏下泛黄的笔记 2024-12-12 16:24:16

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

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

You can user defined objects, but it is a good idea to define the hashCode and equals methods explictly in those classes.

You cannot use int or float because they are primitive types that are not derived from the Object superclass (which provides a default implementation of hashCode() and equals()). If you do need to use ints or floats you need to use their object wrapper classes Integer and Float

以歌曲疗慰 2024-12-12 16:24:16

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

You can assign any class to K, including primitive types in their object forms (Integer, Character...).

淡莣 2024-12-12 16:24:16

唯一不能使用的类型是基元(和 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.

梦中的蝴蝶 2024-12-12 16:24:16

任何对象都可以用作 Key。

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

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

Any object can be used as Key.

  1. if you use user defined class object as key, be very care on
    override method hashCode, equals.

  2. 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文