HashMap基础知识

1.HashMap的特性

  HasMap 存储键值对实现快速存取,允许为null,key值不能重复,key重复则覆盖

  非同步线程不安全

       底层是hash表,不保证有序

2.HashMap实现原理

  JDK1.8底层采用数组+链表+红黑树的数据结构,我们通过put和get存储和获取对象,当我们给put方法传递键和值时,会对键先做一个hashCode计算来的到它在buckset数组中的位置来存储Entry对象,当获取对象时,通过get获取buckset的位置,在通过键对象的equals方法找到正确的键值对,然后返回值对象。

3.HashMap put实现过程

  计算key的hashcode的值然后拿值的高16位做异或运算,如果散列表是空时,调用resize初始化散列表

  如果没有发生碰撞,直接添加元素到散列表中,如果发生了碰撞(hashcode相同) 如果key的地址相同或者equals的内容相同,则替换旧值

  如果是红黑树结构,就直接调树的插入方法

  如果是链表结构,循环遍历直到链表中某个节点为空,使用尾插法插入,插入后判断链表个数是否达到变成红黑树的阀值8

    如果桶满了大于阈值 负载因子0.75  则resize 进行扩容

  

  

原文地址:https://www.cnblogs.com/qi2332356/p/14630189.html