源码预览
拆分思路
如果e 元素是链表类型,则需要遍历链表,将其一拆为二
故定义了low 、high两个链表的头尾指针。
, , ; , , ;
将e的hash码与原数组容量进行按位与,如果结果为零,则加入低位链表
((. ) ) { ( ) ; . ; ; }
如果结果不为零,则加入高位链表
{ ( ) ; . ; ; }
直至遍历完整个链表
while ((e = next) != null);
遍历完成之后,低位链表位置不变,还是在原来的位置上,即 位置 j
( ) { . ; [] ; }
高位链表则需要搬家,搬到原来位置加上原数组容量的位置上,如果原理位置为5,原容量为16,扩容后则位置为5+16 = 21.
( ) { . ; [ ] ; }
逐行解析
; ( ) { ( ; ; ) { ., ; (( []) ) { [] ; (. ) [. ( )] ; ( .) ((.,)).(, , , ); { ., , ; ., , ; ., ; { .; ((. ) ) { ( ) ; . ; ; } { ( ) ; . ; ; } } (( ) ); ( ) { . ; [] ; } ( ) { . ; [ ] ; } } } } } ;