Java | Map

Ch03-Java Map 之 TreeMap

February 28, 2017
Java | Map
Java

TreeMap 实现了 SortedMap 接口,也就是说会按照 key 的大小顺序对 Map 中的元素进行排序,key 大小的评判可以通过其本身的自然顺序 (natural ordering),也可以通过构造时传入的比较器 (Comparator)。

...

Ch02-Java Map 之 LinkedHashMap

February 13, 2017
Java | Map
Java

LinkedHashMap 是 HashMap 的直接子类,二者唯一的区别是 LinkedHashMap 在 HashMap 的基础上,采用双向链表 (doubly-linked list) 的形式将所有 entry 连接起来,这样是为保证元素的迭代顺序跟插入顺序相同。

...

Ch01-Java Map 之 HashMap

February 10, 2017
Java | Map
Java

1. 底层数据结构 # Java 1.7 中使用数组+链表这样的数据结构,自 Java 1.8 开始使用数组+链表+红黑树这样的数据结构。 2. 数组扩容 # resize() 方法用于初始化数组或数组扩容,每次扩容后,容量为原来的 2 倍,并进行数据迁移。 3.线程不安全 # HashMap 的线程不安全主要体现在下面两个方面: 在 Java 1.7 中,当并发执行扩容操作时会造成环形链。 这里主要的原因是线程1上线文中保存的指针指向的数据(newtable,临界资源)被线程2做了修改,当线程1重新恢复上线文后,在已经被修改的数据(newtable,临界资源)上继续未完成的操作,最终导致结果不符合预期。 在 Java 1.8 中,在并发执行 put 操作时会发生数据覆盖的情况。 4. 参考文献 # HashMap为什么在多线程操作下不安全(jdk1.7和jdk1.8原因不同)