集合HashMap原理解析

HashMap

1、基本概念

两个概念:

初始容量(桶) 负载因子

当哈希表中的条目数 > ( 负载因子 * 当前容量 ) 时,哈希表将进行扩容,以便哈希表拥有大约两倍的桶数

初始桶数:16

初始负载因子:0.75

与Hashtable的区别:HashMap是非线程安全的,Hashtable是线程不安全的

2、看代码

2.1 类信息

继承一个抽象类,三个接口

public class HashMap<K,V> 
	extends AbstractMap<K,V>
	implements Map<K,V>, Cloneable, Serializable {
   }

Cloneable接口:实现clone方法来进行深浅克隆

Serializable接口:对象序列化接口

什么时候需要用到序列化?

需要把对象的状态进行网络传输 or 对象信息持久化

private static final long

 serialVersionUID = 362498820763181265L;

该参数就是设置字节流的UID来进行序列化动作

2.2 类属性

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 	// aka 16 初始容量
static final int MAXIMUM_CAPACITY = 1 << 30;		// 最大容量,1 * 2 的30次方
static final float DEFAULT_LOAD_FACTOR = 0.75f;		// 初始负载因子
static final int TREEIFY_THRESHOLD = 8;				// 桶中链表个数超过8时转换为红黑树
static final int UNTREEIFY_THRESHOLD = 6;			// 桶中链表个数小于6时转换为链表

static final int MIN_TREEIFY_CAPACITY = 64;			
// 桶后链表被树化时,最小的hash表容量
// 散列表容量小于64时,就算桶后数量超过8,也不会树化,只会扩容

// transient 属性不会被序列化
transient Node<K,V>[] table;						// 保存桶元素的数组
transient Set<Map.Entry<K,V>> entrySet;				// 返回键值对数据
transient int size;									// 集合中元素个数
transient int modCount;								// 当前结构被修改的次数,配合快速失败机制
		  int threshold;							// 记录桶中链表的数量

final float loadFactor;
// 负载因子,用来衡量hashmap 满的程度,影响扩容时机,默认值为0.75
// 实时计算负载因子的公式:size / capacity,集合元素个数 除以 当前容量

2.3 内部类Node及其内部方法

static 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值