基本介绍:
hashMap是线程不安全的,允许null键null值,jdk1.7之前的结构是链表+数组,jdk1.8之后追加了红黑树。在1.7中,在多线程环境下,扩容时会造成环形链或数据丢失。1.8中,在多线程环境下,会发生数据覆盖的情况。
底层原理:
HashMap底层原理是HashMap基于hashing原理,通过put和get方法存储和获取对象。当将键值对传递给put方法时,它调用键对象的hashCode方法来计算hashcode,然后找到bucker位置来储存值对象。当获取对象时,通过键对象的equals方法找打正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了。对象将会储存在链表的下一个节点中。HashMap在每个链表节点中储存键值对对象。