Java Map原理备忘

作者: 昙花未现 | 来源:发表于2018-09-20 21:54 被阅读8次

    HashMap底层数据结构是数组,通过hash函数和key的hashCode方法获取key所在的数组索引,接着把key和value包裹成Map.Entry对象,最后根据索引把Map.Entry对象放在数组中完成put操作, put操作时如果出现hash冲突,使用列表和红黑树解决冲突,当列表长度等于8时会转换为红黑树,转换为红黑树时如果HashMap的长度小于64时会调用resize方法,不进行转换操作。

    HashMap允许key值为null。当key值为null时,hash函数返回0,Map.Entry对象放在数组索引为0的位置。

    从HashMap中获取数据时,根据key的hashCode方法获取初始hash值,再根据hash函数获取key的数组索引,然后获取到第一个匹配的Map.Entry对象,如果该对象的key等于提供key则返回value值,如果不等,则根据对象的类型,如果是树节点则从红黑树中查找key相等的value值,如果是列表则循环列表查找key相等的value值。

    HashMap的初始容量和负载因子影响它的性能。负载因子决定HashMap的容量什么时候进行重新设置。就是说当插入新元素时,如果HashMap的负载达到设定的值时,就重新设置HashMap的容量为下一个2的n次方。默认初始容量是16,负载因子是0.75。

    HashMap的遍历有三种方式

    1. map.keySet()

    2. map.values()

    3. map.entrySet()

    相关文章

      网友评论

        本文标题:Java Map原理备忘

        本文链接:https://www.haomeiwen.com/subject/fhkowftx.html