嗨,大家好:我试图扫描一些对象,看看是否有任何重复。为此,我使用hashCode字段。对象以二进制文件序列化。在对象集合中递增递增的哈希代码
它看起来像这样:
的hashCode = 26594 的hashCode = 26595 的hashCode = 26596 ...
我绝不会想到,从一个集合哈希码会呈现这样的格局,除非JVM或在某些情况下(或者,内部创建的每个对象都有一个设置为静态增量值的hashCode),thrift会为某些对象随时创建hashCode。
当然,这个问题在这一点上没有明确的答案 - 但是,一般来说,是否有一个原因或常见的情况下,一个对象流会递增增加hashCodes?也许如果过去有人看到过这种现象,它可能会帮助我阐明我想了解的二进制文件。
- 小细节:这些对象是使用Apache thrift库进行二进制序列化的,它们完全是在java/hadoop中读取/写入的。
他们从哪里连载?如果他们在一个排序的集合中,那么订购它们是很自然的。至于值:哈希码由对象数据计算,与生成顺序无关。 – Viruzzo 2012-01-16 15:15:38
我认为这取决于如何为对象定义'hashCode'方法? – 2012-01-16 15:19:30
你已经给出了最可能的原因;散列码是一个增量ID。节俭可以采用散列码生成策略(IIRC)。不确定Hadoop如何处理它。 – 2012-01-16 15:20:05