有没有办法将HashMap存储在特定的内存位置或特定的内存区域内(假设内存地址从0到100)。
根据我的理解,可以通过修改hashCode()函数来实现。任何人都可以分享相同的代码吗?
答案 0 :(得分:0)
hashCode()
的目的只是成为运行代码的VM中 distinct java对象的唯一ID。 不会影响对象在VM使用的虚拟内存中的位置。 它以另一种方式工作,至少在Object
的方法实现中,hashCode()
会获得一个描述该虚拟内存中对象地址的整数。
如果要更改它,则应遵循以下准则。我认为来自Java文档的this解释可以使事情变得清晰:
hashCode的一般合约是:
每当在同一个对象上多次调用它时 执行Java应用程序时,hashCode方法必须始终如一 返回相同的整数,前提是equals中没有使用的信息 对象的比较被修改。不需要保留该整数 从一个应用程序的执行到另一个执行的一致性 相同的申请。
如果两个物体相等则 equals(Object)方法,然后在每个上调用hashCode方法 两个对象必须产生相同的整数结果。
如果两个对象不相等则不需要 equals(java.lang.Object)方法,然后调用hashCode方法 两个对象中的每一个都必须产生不同的整数结果。 但是,程序员应该意识到产生了不同的 不等对象的整数结果可以提高性能 哈希表。
由类Object 定义的hashCode方法确实为不同的对象返回不同的整数。
实现部分来了:
(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言对此实现技术不是必需的。)
编辑:
对于HashMap,hashCode()
方法继承自AbstractMap
,其工作方式与Java documentation中所述相同:
返回此地图的哈希码值。地图的哈希码是 被定义为地图中每个条目的哈希码的总和 entrySet()视图。这确保了m1.equals(m2)意味着 m1.hashCode()== m2.hashCode()用于任意两个地图m1和m2,根据需要 通过Object.hashCode()的一般合同。
如您所见,它遵循上面指定的合同
希望这有帮助