发表于: 2017-12-27 23:38:48
1 555
今天完成的事情:
1. 完善接口文档
2. 学习Map
明天计划的事情
1. 小课堂
2. 和前端对接口
3. SQL语句
遇到的问题:
无
收获:
1. 完善接口文档
2. map
& 与运算
可以看作上下进行乘法
1001 & 1111 = 1001
HashMap<String,Student> hashMap = new HashMap<String, Student>();
hashMap.put("张三",student1);
put方法:
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
hash方法:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
hash( ),根据key 计算出key对应的hash值,但hash值并不是要存储的真正的位置,相当于key的别名
tab[i = (n - 1) & hash]
n为数组的长度,hash为key对应的hash值。i才是真正的地址所在
如何保证数值不越界:?
n为数组长度,应为2的幂次方,-1后二进制必然为连续的1,在hash和n-1做与运算的时候必然必能大于1111...
默认初始数组长度为16,但是size的逻辑长度没有put为0
put后先看是否有数组,没有就初始化。
算出key对应出的数组,查看数组否为空,为空就把key-value插入,如果不为空
查看两个key对应的hash值和value是否相等 相等就把node指向同一存储空间。
不相同就看该单链表下一个node, , 看两个key对应的hash值和key是否相等 相等就把node指向同一存储空间。
node为空就存进去,不为空看key对应的hash值和key是否相等 相等就跳出本次循环,然后把e指向的node给p,开始下一次驯环,直到第8次循环,就把单链表换为红黑树。
任务进度:接口文档
任务开始时间:2017-12-26
DOME时间:2018-2-9
评论