在今天对JDK1.8中HashMap的源码走了一遍
其中对hash的计算做了优化,及那个原先的JDK1.7中计算hash的扰动处理,改为了一个移位运算以及一个异或,大大的增强了代码的可理解性
其中新添加了一些属性,如“TREEIFY_THRESHOLD(数化门槛:8)”、“UNTREEIFY_THRESHOLD(反数化门槛:6)”、“MIN_TREEIFY_CAPACITY(最小数化容量)”,在达到节点有8个之多,capacity大于64的时候,则会进行树化操作。反之,若节点<6,则会进行反树化操作。
另外,针对JDK1.7中HashMap使用的头插法可能出现的死循环现象,JDK1.8作出了改进,使用尾插法,规避了此种问题。但是HashMap任然是线程不安全的。
在核心方法:put、remove、get新增了如果为tree化的执行步骤。
在HashSet中,其核心方法:add、remove、contains,其中大都是调用map中的方法,通map,这里也便自通了。其等同于数学中的集合,无序、不重复。