Collection概念:是一个集合接口,提供了对集合对象进行基本操做的通用接口方法。html
有如下结构:数组
|--List安全
| |--LinkedList工具
| |--ArrayList线程
| |--Vectorhtm
| |--stack对象
|--Setblog
Collections: 包含各类有关集合操做的静态多态方法,且该类没法实例化,至关于一个工具类。接口
HashMap的特色:线程不安全,容许传入 null值,不能保存映射的顺序。由数组(默认长度为16)+链表组成,jdk1.8后,若其链表长度大于8,就会转变成红黑树。资源
ps:HashMap线程不安全,是由于多个对象同时对同一HashMap进行操做时,会致使脏读、数据丢失的发生。
详细参考:https://www.cnblogs.com/aspirant/p/8908399.html
HashTable:能够理解为线程安全的HashMap,为何是线程安全的,由于它的put、remove、get方法都被synchronized修饰,使其同步,天然是线程安全的了。
ConcurrentHashMap:是线程安全且高效的HashMap,由Segment数组结构和HashEntry数组结构组成,Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。
一个ConcurrentHashMap里包含一个Segment数组,Segment的结构和HashMap相似,是一种数组和链表结构, 一个Segment里包含一个HashEntry数组,每一个HashEntry是一个链表结构的元素, 每一个Segment守护着一个HashEntry数组里的元素,当对HashEntry数组的数据进行修改时,必须首先得到它对应的Segment锁。
为何安全:采用了分段锁技术,给Segment数组的每一个元素加锁。
分段锁技术:大体含义就是,将资源分红多个段存储,再给这些资源分段分别配一把锁,这样线程访问其中一个资源也不影响其余线程访问其余分段的资源,大大提升了效率。