【Java】谈谈IdentityHashMap
一,概述
IdentityHashMap不同于HashMap,IdentityHashMap故意不遵守equals&hashcode规范,其key值比较直接使用引用比较,即==,其应用场景在于使用一个类实例作为key时,如果不过多强调equals&hashcode规范,则使用引用比较会更快。想象下,如果一个大对象内部equals方法树特别深,性能就有损耗,如果只关注一个对象实例作为key,IdentityHashMap就比HashMap更合适。
IdentityHashMap内部实现相比HashMap较简单,hash冲突时使用了线性探测法解决,性能也不差。
二,原理
此处看下get方法吧,很简单,
计算出hash值映射的坐标i,通过线性探测法获得value即可。
再看下put方法
计算hashcode映射的数组下标i,如果存在旧值直接替换即可,否则通过线性探测法存在value。
如果必要,触发resize逻辑,不赘述。