我有一个这样的类构造器:
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/