赞
踩
微信搜索《Java鱼仔》,每天一个知识点不错过
说一下 HashMap 的实现原理?
HashMap底层是一个哈希表,以数组加链表的形式存储值。HashMap具有以下特点:
1.HashMap允许key和value为空
2.HashMap是线程不安全的
3.HashMap的初始容量为16,负载因子大小为0.75
4.在jdk7.0中,底层是数组加链表;在jdk8.0中,底层是数组加链表加红黑树
HashMap中维护了Node类型的数组table,当HashMap创建对象时,设置负载因子为0.75,table还是null。
当第一次添加元素时,将table的容量设置为16,临界值设置为12
每次添加元素调用putVal方法:
1.将key的hash值和table容量-1进行与运算,得到索引值
2.判断该存放位置上是否有元素,如若没有元素则直接放上去;如果该索引位置已存在元素,则继续判断
3.如果该位置的元素和添加元素相等,则直接覆盖,如果不相等,则继续判断是链表结构还是树状结构,按照相对应的方式添加。
如果添加的数量大于临界值,执行resize方法对容量双倍扩容。并打乱顺序重新排列。
我专门写了一篇博客对HashMap、HashTable、TreeMap的底层源码进行分析和对比,大家可以看下:
java集合深入理解(五):HashMap、HashTable、TreeMap的底层源码分析和对比
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。