键值对集合(Map接口)

"Map" 是一种常见的数据结构,用于存储键值对集合。
每个键都是唯一的,并且通过该键可以快速访问对应的值。

一、 线程不安全

1.1 HashMap
1.特点
(1)无序
(2)查找效率高:根据key,查找value
2.数据结构
  数组(哈希表)+链表(链地址法解决哈希表冲突)+红黑树(自平衡的二叉树,提高查找效率)
3.关键计算
  计算key-value键值对在哈希表中的存储位置(桶)
  (1)哈希运算,计算新的哈希值:hash()扰动函数
       a.(h=key.hashCode())^(h>>>16)
       b.目的:计算新的哈希值,降低哈希冲突概率
  (2)通过新哈希值,计算下标位置(桶位置):(n-1) & hash
4.转换成红黑树的的条件
  链表的元素个数超过8,并且数组长度大于等于64
5.红黑树退化成链表的条件
  红黑树中的元素个数少于6
6.转换成红黑树的优点
(1)链表过长,会导致搜索效率降低,使用红黑树提高查找效率
(2)红黑树,是一颗自平衡的二叉查找树,树种所有的节点均自动排序。并且自平衡,可以使用二分查       找,提高查找效率
7.影响性能的关键参数
(1)数组容量(默认为16)
	a.容量越大,内存占用越多,产生冲突的概率越小
	b.必须为2的N次幂
	c.每次按照2倍进行扩容,最大容量不超过2的30次幂
(2)加载因子(默认为0.75)
	a.加载因子越高,代表利用率越高,产生冲突的概率越高
	b.加载因子越低,代表利用率越低,产生冲突的概率越低
(3)扩容条件
	a.默认情况下,数组长度为16(自定义时,必须保证数组长度为2^n次幂)
	b.(数组容量*利用率0.75)达到扩容阈值threshold,按照2倍进行扩容
	c.链表长度大于8,数组长度小于64(链表不会转换成红黑树,执行数组扩容)
1.2 LinkedHashMap
1.特点:有序
2.数据结构:HashMap的子类,多维护了一条双向链表,保存顺序
1.3 TreeMap
1.特点:自动按照key排序
2.数据结构:红黑树
二、线程不安全
1.4 HashTable
1.特点:无序、key和value不允许为null
2.数据结构:数组+链表
3.线程安全:通过“synchronized”同步锁实现
1.5 ConcurrentHashMap
1.特点:无序
2.数据结构:数组+链表+红黑树
3.线程安全:synchronized同步锁+CAS无锁化编程模型
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值