【内容】
集合类名 | 底层大致实现 | 备注说明 |
---|---|---|
vector | 数组实现,查询更改操作都加上synchronized | |
stack | ||
hashTable | 在hashMap的基础上多了个线程安全,不允许插入空值 | |
java.util.concurrent | =========================== | 墙裂推荐http://www.cnblogs.com/ijavanese/p/3778688.html |
阻塞队列家族 | (ArrayXXX,LinkedXXX,PriorityXXX,DelayQueue) | https://blog.csdn.net/qq_33907408/article/details/85222613 |
【补充】
Serializable接口的实现
Cloneable接口的实现
RandomAccess接口的实现
transient关键字
- 安全性
线程安全包括原子性和可见性两个方面
如果集合不是线程安全的话,在多线程情况下插入数据会出现数据丢失的问题synchronized保证的线程安全
java.util.concurrent.locks.ReentrantLock实现的线程安全
- vector
extends AbstractList
implement List RandomAccess Cloneable Serializable
基于可以自动扩容的动态数组实现
Vector没有实现Serializable接口,因此它不支持序列化。
实现了Cloneable接口,能被克隆。
实现了RandomAccess接口,支持快速随机访问。
- 初始大小默认10
- 容量和大小不同,可以用trimToSize去掉多余的容量
- 基本对vector的查询或者更改操作都加上了synchronized
- ensureCapacityHelper:调用该方法来确保足够的容量,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量),而后同样用Arrays.copyof()方法将元素拷贝到新的数组。
-
stack
-
hashTable
extends Dictionary<K,V>
implement Map<K,V> Cloneable Serializable
数组和链表的结合体,entry是hash表的对应的链表头
Hashtable 的实例有两个参数影响其性能:初始容量16 和 加载因子0.75
hashTable成员变量(private) | 作用 |
---|---|
table | Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的 |
count | Hashtable的大小,它是Hashtable保存的键值对的数量 |
threshold | Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值=“容量*加载因子” |
loadFactor | 加载因子 |
modCount | 修改次数统计,实现fail-fast机制 |
【补充】
- transient关键字
这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化:只要是实现Serilizable的接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。