Java面试必问之Hashmap底层实现原理(JDK1.7)
当我遇上你csy 人气:0
# 1. 前言
Hashmap可以说是Java面试必问的,一般的面试题会问:
* Hashmap有哪些特性?
* Hashmap底层实现原理(get\put\resize)
* Hashmap怎么解决hash冲突?
* Hashmap是线程安全的吗?
* ...
今天就从源码角度一探究竟。笔者的源码是OpenJDK1.7
# 2. 构造方法
首先看构造方法的源码
```java
// 默认初始容量
static final int DEFAULT_INITIAL_CAPACITY = 16;
// 默认负载因子
static final float DEFAULT_LOAD_FACTOR = 0.75f;
// 数组, 该数据不参与序列化
transient Entry[] table;
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
// 初始容量16,扩容因子0.75,扩容临界值12
threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);
// 基础结构为Entry数组
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
}
```
由以上源码可知,Hashmap的初始容量默认是16, 底层存储结构是数组(到这里只能看出是数组, 其实还有链表,下边看源码解释)。基本存储单元是Entry,那Entry是什么呢?我们接着看Entry相关源码,
```java
static class Entry
加载全部内容