hashmap要点

synchronizedMap

为每个防范添加了synchronized

哈希表为解决冲突,可以采用开放地址法和链地址法等来解决问题

大小为2的幂次是为了取模和扩容(不需要重新计算hash)的效率

get:

计算数组位置地址,使用高位运算(hash值右移16)和取模(和n-1&)

put:计算地址;是否存在key;是否treenode;是否超过8;是否超过threadhold

扩容:新数组(2倍),

循环中删除元素,需要使用迭代器,只能对每一个next()当前元素做一次修改,否则异常,普通的循环会导致指向下一个元素的指针失效,报异常

arraylist的循环删除:

foreach循环删除:删除后只能退出循环,否则异常

普通的循环会漏掉元素

iterator可以实现正常循环删除(Java8的Collection.remove(filter)是该方法的default实现,可以直接使用)