java - 为什么 ByteBuffers 的 hashCodes 是一样的?

标签 java debugging buffer hashcode bytebuffer

我有一个这样的类构造器:

public JavoImageCorrectedDataHeader()
    {
        ByteBuffer buffer = ByteBuffer.allocate(this.size());
        buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN);
        setByteBuffer(buffer, 0);
        System.out.println("buffer.hasCode=" + buffer.hashCode());
    }

在我的其他类(class)中,我使用

在不同的位置和时间创建了上述类(class)的许多实例
new JavoImageCorrectedDataHeader()

然后,我预计它会为他们打印出不同的 hashCode。但我实际上看到打印出相同的 hashCode:

buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241
buffer.hasCode=1742602241

我一定错过了一些关于如何使用 ByteBuffer 的东西。

最佳答案

来自javadoc:

The hash code of a byte buffer depends only upon its remaining elements; that is, upon the elements from position() up to, and including, the element at limit() - 1.

Because buffer hash codes are content-dependent, it is inadvisable to use buffers as keys in hash maps or similar data structures unless it is known that their contents will not change.

如果您没有填充 ByteBuffers,或者用相同的东西填充它们,哈希码将是相同的。

关于java - 为什么 ByteBuffers 的 hashCodes 是一样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089890/

相关文章:

java - 如何使用 couchbase SearchQuery 查询两组参数

java - 是否可以跨两个不同的jvm实现单例?

jquery - JavaScript console.log 导致错误 : "Synchronous XMLHttpRequest on the main thread is deprecated..."

.net - 是否有WinForm控件检查器应用程序?

java - 使用 Eclipse 将调试器附加到应用程序

iphone - 关于我的 OpenGL 的问题 - 代码

java - 在 Java 中根据 Xml 模式数据类型验证字符串

buffer - 发送缓冲区和接收缓冲区(txb & txb)的用法和区别

c - setbuf重定向

java - HashBag就地删除