集合架构图


集合架构图,转载https://www.cnblogs.com/jing99/p/7057245.html

把此图深印在脑中,面试集合的时候脑中去回想这张图,事半功倍。

今天重点说一下map,也就是这张图的右半部分。

Map:

HashMap:

1、在JDK1.8之前,HashMap采用数组+链表实现,8以后(包含jdk8)HashMap采用数 组+链表+红黑树实现.当链表长度超过阈值(8)时,将链表转换为红黑树。允许使用 null 值和 null 键,

2、该集合是不同步的

设置HashMap线程安全:Map m = Collections.synchronizedMap(new HashMap(...));

3、扩容:构造一个空的HashMap,初始容量16,负载因子0.75,当容量超过自身容量百分之75的时候,容量会扩大一倍。

LinkedHashMap:

也是一个HashMap,但是内部维持了一个双向链表,可以保持顺序,想保持进入的顺序与被取出的顺序一致的话,优先考虑

TreeMap:

1、底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序


Collections.synchronizedMap()与ConcurrentHashMap的区别

1、Collections.synchronizedMap()和Hashtable一样,实现上在调用map所有方法时,都对整个map进行同步,而ConcurrentHashMap的实现却更加精细,它对map中的所有桶加了锁。ConcurrentHashMap在性能以及安全性方面,明显比Collections.synchronizedMap()更加有优势。同时,同步操作精确控制到桶

2、ConcurrentHashMap从类的命名就能看出,它必然是个HashMap。而Collections.synchronizedMap()可以接收任意Map实例,实现Map的同步

此处转载:https://blog.csdn.net/lanxiangru/article/details/53495854