JDK1.8前,HashMap底层使用数组和链表结合。首先通过key的hash值判断当前元素存放在数组的位置;如果该位置存在元素,则判断该元素与要存入的元素的hash值以及key是否相同,如果相同直接副高,不同就接到后面形成链表。
JDK1.8后,当一个数组位置的链表长度大于阈值(默认8)时,将链表转化为红黑树,减少搜索时间。
ps:TreeMap、TreeSet以及JDK1.8后的HashMap底层都用到了红黑树。红黑树就是为了解决二叉查找树在某些情况下会退化为线性结构的缺陷。
来源:oschina
链接:https://my.oschina.net/u/3991724/blog/3185425