HashMap
2020-12-20 16:32:26 0 举报
jdk1.7HashMap
作者其他创作
大纲/内容
2.判断key是否为空key == null
2.addEntry
2.创建节点
private void inflateTable(int toSize)
1.判断table是否为空table == EMPTY_TABLE如果为空,初始化table
1.key=null
参数验证1. initialCapacity < 0 剖异常2. initialCapacity > MAXIMUM_CAPACITY ? MAXIMUM_CAPACITY:initialCapacity3.loadFactor <= 0 || Float.isNaN(loadFactor) 剖异常赋值1.this.loadFactor = loadFactor; threshold = initialCapacity;init();
i |= (i >> 1); i |= (i >> 2); i |= (i >> 4); i |= (i >> 8); i |= (i >> 16); return i - (i >>> 1);
private static int roundUpToPowerOf2(int number)
2.查找map
get(Object key)
true threshold
头插法
1.扩容
1.getForNullKey();
3.计算hash值,计算在table中索引位置
addEntry
Integer.highestOneBit
如果key为空
void init() 这是个空方法
public V get(Object key)
1.size = 0 ;return null;2.遍历table[0]链表,查找key = null的节点,并返回3.如果第二步查找不到 return null;
jdk1.7_HashMap
return number >= MAXIMUM_CAPACITY ? MAXIMUM_CAPACITY : (number > 1) ? Integer.highestOneBit((number - 1) << 1) : 1;
遍历table[0]链表,如果存在key=null,将value替换为新值,并return
capacity
4.判断table中是否已经存在改key对应的值,如果存在新值替换旧值,并返回旧值
2.getEntry(key)
return
toSize
0 条评论
回复 删除
下一页