摘要:
what: hashmap扩容 1、重新建立一个新的数组,长度为原数组的两倍(实际长度为2的n次幂); 2、遍历旧数组的每个数据,重新计算每个元素在新数组中的存储位置(一次性完成);使用节点的hash值与旧数组长度进行位与运算,如果运算结果为0,表示元素在新数组中的位置不变;否则,则在新数组中的位置 阅读全文
摘要:
why: 在 JDK7 及之前的版本,HashMap 的数据结构可以看成“数组+链表”; 在 JDK8 及之后的版本,数据结构可以看成"数组+链表+红黑树"; how: JDK8中,桶的链表长到一定长度后,会尝试变树。具体代码如下: static final int TREEIFY_THRESHOL 阅读全文
摘要:
what: java中map的大体的结构如下: hashmap: a、HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的;它采用 key-value 键值对的形式存放元素(并封装成 Node 对象),允许使用 null 键和 null 值,但只允许存在一个键为 nu 阅读全文
摘要:
what: fail-fast:在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。 fail-safe:在迭代器遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合 阅读全文