Java地图>>可能有内在类型吗?
这怎么可能: HashMap
而 byte[] 的 hash() 是什么?
How is this possible:HashMap<byte[], byte[]>
and what is hash() of byte[]?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
这怎么可能: HashMap
而 byte[] 的 hash() 是什么?
How is this possible:HashMap<byte[], byte[]>
and what is hash() of byte[]?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
是的,这是可能的(有一个很大的警告,见下文),但是
byte[]
不是“内在类型”。首先,不存在这样的东西,您可能指的是“原始类型”。第二:byte[]
不是原始类型,byte
是。数组始终是引用类型。数组没有特定的
hashCode
实现,因此它们只会使用Object
的hashCode
,表示hashCode
将是 身份-hashCode
,与实际内容无关。换句话说:
byte[]
是一个非常糟糕的Map
键,因为您只能检索具有完全相同的实例的值。如果需要基于数组的内容
hashCode()
,可以使用Arrays.hashCode()
,但这不会(直接)帮助您这地图
。还有Arrays.equals()
检查内容是否相等。您可以将
byte[]
包装在一个实现hashCode()
和equals()
的薄包装对象中(使用上面提到的方法):使用此类,您可以使用
Map
。Yes, it is possible (with a big caveat, see below), but
byte[]
is not an "intrinsic type". First, there's no such thing, you probably mean a "primitive type". Second:byte[]
is not a primitive type,byte
is. An array is always a reference type.Arrays don't have specific
hashCode
implementations, so they'll just use thehashCode
ofObject
, which means that thehashCode
will be the indentity-hashCode
, which is independent from the actual content.In other words: a
byte[]
is a very badMap
key, because you can only retrieve the value with the exact same instance.If you need a content-based
hashCode()
based on an array, you can useArrays.hashCode()
, but that won't help you (directly) with theMap
. There's alsoArrays.equals()
to check for content equality.You could wrap your
byte[]
in a thin wrapper object that implementshashCode()
andequals()
(using the methods mentioned above):Using this class you can then use a
Map<ArrayWrapper,byte[]>
.对于数组,
hashCode()
使用Object
的默认实现 - 通常是某种形式的内部对象地址。因此,如果此HashMap
中的键是不同的数组,则该键被认为是唯一的,而不是在数组内容相等的情况下。For arrays
hashCode()
uses the default implementation fromObject
- typically some form of internal object address. As a result, key in thisHashMap
is considered unique if it is a different array, not if array contents are equal.