【2019春招准备:13. Collection中的线层安全及其底层实现】

51 篇文章 0 订阅

【内容】

集合类名底层大致实现备注说明
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关键字

  1. 安全性

线程安全包括原子性和可见性两个方面
如果集合不是线程安全的话,在多线程情况下插入数据会出现数据丢失的问题

synchronized保证的线程安全
java.util.concurrent.locks.ReentrantLock实现的线程安全

  1. vector
    extends AbstractList
    implement List RandomAccess Cloneable Serializable

基于可以自动扩容的动态数组实现
Vector没有实现Serializable接口,因此它不支持序列化。
实现了Cloneable接口,能被克隆。
实现了RandomAccess接口,支持快速随机访问。

  • 初始大小默认10
  • 容量和大小不同,可以用trimToSize去掉多余的容量
  • 基本对vector的查询或者更改操作都加上了synchronized
  • ensureCapacityHelper:调用该方法来确保足够的容量,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量),而后同样用Arrays.copyof()方法将元素拷贝到新的数组。
  1. stack

  2. hashTable
    extends Dictionary<K,V>
    implement Map<K,V> Cloneable Serializable
    hashtable

数组和链表的结合体,entry是hash表的对应的链表头
Hashtable 的实例有两个参数影响其性能:初始容量16 和 加载因子0.75
hashtableapi
在这里插入图片描述

hashTable成员变量(private)作用
tableEntry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的
countHashtable的大小,它是Hashtable保存的键值对的数量
thresholdHashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值=“容量*加载因子”
loadFactor加载因子
modCount修改次数统计,实现fail-fast机制

【补充】

  • transient关键字
    这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化:只要是实现Serilizable的接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值