将hashmap存储在java中的特定内存中

时间:2016-11-23 11:51:26

标签: java hashmap heap-memory

有没有办法将HashMap存储在特定的内存位置或特定的内存区域内(假设内存地址从0到100)。

根据我的理解,可以通过修改hashCode()函数来实现。任何人都可以分享相同的代码吗?

1 个答案:

答案 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()的一般合同

如您所见,它遵循上面指定的合同

希望这有帮助