In most cases, there will be very few elements in the bucket; often zero or one. In these cases, a simple hash bucket design can guarantee O (1); O (log n) BST can shorten the time in some suboptimal cases of cross, but the performance gain is negligible at best and negative at worst. There is also significant overhead memory. Java 8 attempts to detect when the linked list is no longer optimal and converted to BST; however, if this happens frequently, it is a sign that hashes and HashMap are being used incorrectly.
When reading the source code for the JDK, there are many implementation details. Here is a brief excerpt from the top of Oracle java.util.HashMap:
HashMap # getNode HashMap.Node, , - , java.util.LinkedList, .
, , . , HashMap.TreeNode, , - BST.