1: Node 的设计 静态内部类,该类是能够被继承的。
TreeNode 的设计。 静态内部类,使用final修饰标识该类不应该再被继承了。
2: 如何定位一个Node节点位于table(桶)中的Index值。
先对key使用hash函数进行处理。 静态的final方法,该方法不能重写(覆盖)。
为什么这里不直接使用key.hashCode()返回的数值?
因为这样处理使得高位能参与到运算中来,减少hash冲突。
进行定位 i = (n - 1) & hash ,i 即为该Node在table中的index值。
因为table的大小为2^n , 而 m % 2^n = m & (2^n - 1)。
如何进行 put 操作
调用构造函数时不会触发回收操作。add等操作能触发回收操作。
3 : tableSizeFor 函数 当 64<cap ≤128 时该函数返回的值为128 。
静态的final 方法,标识该方法不能被重写(覆盖)。
4: 为什么处理冲突的链表的长度达到8时,会将链表转化为红黑树。
首先当数量达到8时,红黑树的查找性能高于链表这是毋庸置疑的。
数量达到8的概率有多大?是否为一个大概率事件?有没有必要进行这样的处理?此处上升为一个概率论问题。
当Tree的数量少于6时又转化为链表。
5: 看似几句话能说明白的原理但编码起来并不容易,基础知识积累不够的根本没法读懂源码更不用谈去编程。所以深层次的编程和底层的编程还是得依靠那些学术界的大牛和聪明的人物来提供可靠高效的代码。
6: 钩子程序