HashMap的源码解读

1.继承关系:
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
实现了map接口,可以克隆,序列化
2.基本属性和默认值:
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;hash表中数组默认初始大小为16
static final int MAXIMUM_CAPACITY = 1 << 30;hash表中数组最大的容量
static final float DEFAULT_LOAD_FACTOR = 0.75f;默认加载因子->扩容时使用
transient Node<K,V>[] table;储存节点的数组
transient int size;元素个数
transient int modCount;版本号
int threshold;阈值==加载因子*容量
final float loadFactor;加载因子
static final int TREEIFY_THRESHOLD = 8;树化的临界值
static final int UNTREEIFY_THRESHOLD = 6;解除树化的临界值
static final int MIN_TREEIFY_CAPACITY = 64;最小数化的容量
static class Node<K,V> implements Map.Entry<K,V> {节点类
final int hash;与key相关的hash
final K key;键
V value;值
Node<K,V> next;下一个节点的索引
3.构造函数
// 指定加载因子与起始容量 public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity);
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException("Illegal load factor: " + loadFactor); this.loadFactor = loadFactor;
this.threshold = tableSizeFor(initialCapacity);
}
// 指定起始容量,加载因子默认
public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR);
}
// 全部默认 public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted
}
4.扩容方式
当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的容量。
5.基本方法
1 put(K key, V value)方法用来修改HashMap中的值,当HashMap中没有这个值的时候,增加这个值;当HashMap中存在这个值的时候,替换当前值。
2 get(Object key)方法用来读取HashMap中的值
3 remove(Object key)方法用来删除HashMap中的值
4 containsKey(Object key)用来判断HashMap中包含某个键
5 containsValue(Object value)用来判断HashMap中包含某个值
6 size( )计算HashMap的长度
7 isEmpty( )判断HashMap是否为空
8 get( )获取HashMap( )中的值
9 clear( )删除所有的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值