map集合操作

来源:互联网 发布:淘宝身份证认证照片 编辑:程序博客网 时间:2024/06/06 01:12
一、ConcurrentHashMap
put方法
执行流程
1、把指定key,value字段进行锁住
2、判断value是否为null
3、通过hash算法这个key获得一个int的hash值
4、把hash值进行位运算
5、判断进行安全切割
6、把之前指定key,value字段进行put值

size方法
1、获得这个key,value对象锁
2、初始化
size
overflow
sum
last
retries
3、 设置锁对象的长度进行lock
4、然后统计长度

get方法
1、传入key后锁住key,value这个键值对
2、定义一个hashEntry键值对的实体数组
3、通过hash算法key 的到一个int值
4、判断这个锁住的key,value不为null
5、循环遍历hashEntry键值对的实体数组
6、判断有key相同的直接这个value,如果没有key相同直接返回null


二、HashMap
put方法
1、判断table 是否等于 next table实体
如果判断是直接把直接扩展table长度
2、判断传入的key是否为空
如果判断是空直接添加value
3、判断之前key等于null
如果key判断是调用putForNullKey方法判断值是否存在
4、通过hash算法这个key获得一个int的hash值
5、调用indexFor(hash,table.length)方法获得int i值
6、通过Entry<K,V> e 中的recordAccess,记录当前这个值
7、addEntry(hash,key,value,i)
判断长度是否够,不够翻倍增加(2*)
创建一个实体传入hash,key,value,table的索引

size方法
在堆内存创建对象的时候定义了 transient size
直接从堆内存获取这个size

get方法
1、获得key,判断key是否null
2、调用getEntry(key) 获得key,value的实体
1)先判断size不为0
2)得到key的hash值
3)循环遍历entry实体数组,把entry的key通过hash算法然后和之间的到的hash值进行比较,如果成功就直接返回entry
3、判断这个entry实体是否为空
1)是 空返回null
2)否 不为空调用entry.getValue()获得实体value

三、HashTable(效率低应为这个很多地方使用synchronized同步对象了)
put方法
1、判断value是否为空
空直接抛空指针异常
2、通过table获得entry实体数组
3、通过hash算法这个key获得一个int的hash值
4、判断得出的hash没有超过16位-1的长度,再除以表的长度
5、通过表的index循环遍历entry实体,通过实体的hash和生成的hash比较&&实体的key比较传入的key
如果相等直接返回这个old实体
6、新的统计次数 大于 老统计次数
7、通过创建这个实体把值设置进去,并且根据索引添加到table表中

size方法
在堆内存创建对象的时候定义了 private transient int count
直接从堆内存获取这个size,并且synchronized 同步

get方法
1、创建一个entry 数组
2、通过hash算法这个key获取一个int的hash值
3、获得这个entry数组的长度索引
4、循环遍历entry数组索引
1)判断entry的key进行hash算法的到的hash值和之前传入key得到的hash值进行比较
2)是 返回entry的value
3)否 返回null

四、LinkedHashMapTest(它是hashmap的继承子类)
put方法
1、判断table这个实体跟之前是否相等
1)相等调用inflateTable方法判断给这个,通过传入两个值a,b进行判断
2)相等返回b
2、不相等直接teturn下面的判断a小于等于b ,小于返回a ,大于返回b


size方法
在堆内存创建对象的时候定义了 transient size
直接从堆内存获取这个size

get方法(跟hashmap一样)
1、获得key,判断key是否null
2、调用getEntry(key) 获得key,value的实体
1)先判断size不为0
2)得到key的hash值
3)循环遍历entry实体数组,把entry的key通过hash算法然后和之间的到的hash值进行比较,如果成功就直接返回entry
3、判断这个entry实体是否为空
1)是 空返回null
2)否 不为空调用entry.getValue()获得实体value
0 0
原创粉丝点击