用途与特点
存储Key—value形式数据,在JDK1.7时撞库使用链表,在1.8中对HashMap撞库情况进行优化,使用链表与红黑树对撞库进行优化
ps: 红黑树还没整明白为什么会自动平衡,所以暂时略过讲解,之后补充。
实现算法
HashMap的底层实现方式其实就是Node<K,V>[]数组实现,
默认初始数组长度是16,默认扩展扩容是在数组长度16*0.75=12时进行扩容。
扩容机制
扩容时机:是在加入数据时,(数组长度16*0.75=12)大于12时进行扩容
扩充的新数组长度是: 数组长度16*0.75=12
是否线程安全,为什么?
非线程安全,未对数据的添加、删除、读取等做锁操作
参考:
二叉树是自顶向下生长 红黑树是自底向上生长