hashmap实现原理详解
来源:互联网 发布:js秒表倒计时 编辑:程序博客网 时间:2024/05/16 16:09
要毕业了,hashmap是面试官非常喜欢问的问题,经常会碰到:来说说hashmap的实现原理,hashmap怎么get、put的,行吧,简单总结一下。
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 初始大小,创建一个初始容量为16的数组,数组中的每个下标位置相当于一个链表,也就是一个桶;
static final float DEFAULT_LOAD_FACTOR = 0.75f;负载因子,当数组中的某个桶的元素个数超过12,就会对map数组进行扩容,变为原来的2倍,map中的数组元素需要重新hash;
int threshold;最大值为1<<31,每次对map数组进行扩容时,会看是否达到最大值,达到后,不会再扩容;
hashmap get :
1.
public V get(Object key) { if (key == null) return getForNullKey(); Entry<K,V> entry = getEntry(key); return null == entry ? null : entry.getValue(); }
2.
private V getForNullKey() { if (size == 0) { return null; } for (Entry<K,V> e = table[0]; e != null; e = e.next) { if (e.key == null) return e.value; } return null; }3.
final Entry<K,V> getEntry(Object key) { if (size == 0) { return null; } int hash = (key == null) ? 0 : hash(key); for (Entry<K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } return null; }
主要就3件事:
首先hashmap中可以有null,且唯一
1.当map.get(Object key)时,会判断key是否为空,如果为空,并且map中有一个key的值为null
进入getForNullKey()方法,然后开始遍历找到value返回,不然直接返回null。
2.如果key不为空,根据key的hash值去找到对应的hash存放位置(hash/(tableLength-1)),也就是对应的那个桶,里面可能会有很多数据;
3.开始遍历这个桶(链表),直到key相同时,返回value;
map中其实是一个数组,数组的每个位置有又是一个链表(相当于一个桶),桶里面存放数据是entry,,每个entry<key,value>,还有一个next属性,指向下一个entry。
改天在写!!!!下班了
阅读全文
0 0
- hashmap实现原理详解
- HashMap实现原理详解
- HashMap实现原理详解
- 详解HashMap内部实现原理
- HashMap实现原理分析(详解)
- HashMap实现原理分析(详解)
- HashMap实现原理分析(详解)
- Java HashMap 的实现原理详解
- Java HashMap 的实现原理详解
- Java HashMap 的实现原理详解
- Java HashMap的实现原理详解
- Java HashMap 的实现原理详解
- HashMap实现原理分析-resize()详解
- Java中HashMap详解 - HashMap源码及实现原理
- Java HashMap实现原理2——HashMap详解
- HashMap原理机制详解
- HashMap工作原理详解
- HashMap原理及详解
- android 应用开发-实现简单的音乐播放功能
- rocketMq消息中间件认知
- 软件测试思想者
- elk
- JDK1.7的HashMap源码
- hashmap实现原理详解
- 阶乘因式分解(一)
- OpenMV中文教程
- JS时间戳转换[OK]
- linux如何安装qq输入法
- [数组]二分查找算法
- Junit测试service中的方法
- c/c++整理--虚函数
- java中常见字符串操作函数