同时发布:https://daiyuhe.com/bucket-convert-to-red-black-tree-when-8-size/
百度了一下,感觉能说清楚的并不多,其中有一个非常多的回答是以链表和红黑树的平均查找长度来解释,但是这种解释的所有回答中都没有提到出处,始终让人不能彻底相信。通过查阅官方文档和源码之后,在这里说说我的理解。
HashMap中的注释有一段Implementation notes,大致说明了我们的问题,我们来看看。
Tree bins (i.e., bins whose elements are all TreeNodes) are ordered primarily by hashCode, but in the case of ties, if two elements are of the same “class C implements Comparable<C>”, type then their compareTo method is used for ordering. (We conservatively check generic types via reflection to validate this – see method comparableClassFor). The added complexity of tree bins is worthwhile in providing worst-case O(log n) operations when keys either have distinct hashes or are orderable, Thus, performance degrades gracefully under ac