java 集合框架线程安全

一、Collection 接口(单列集合)

1.子接口

1.1 List接口
1.1.1 特点

        List的特点是有序,允许重复(值不唯一)

1.1.2  常见实现类
(1).线程不安全
ArrayList

1.数据结构:数组:Object[ ] elementData

2.使用场景:查找、遍历效率高,插入、删除效率低

3.扩容方式:

(1).初始化:

  • 无参构造方法,数组的初始化容量为0,添加第一个元素时,数组容量扩容为10
  • 有参构造方法,数组按指定容量初始化

(2).容量不足时: 按照数组现有容量的1.5倍扩容

LinkedList

1.数据结构:链表:双向链表

2.使用场景:插入、删除效率高,查找效率低

3.扩容方式:链表动态扩容,每添加一个节点,链表动态扩容一个元素空间

(2).线程安全
Vector

1.数据结构:数组:Object[ ] elementData

2.扩容方式

(1).初始化:

  • 无参构造方法,数组的初始化容量为10
  • 有参构造方法,数组按指定容量初始化

(2).容量不足时:按照数组现有容量的2倍或指定容量值(capacityIncrement)进行扩容

3.线程安全:通过“synchronized”同步锁实现 

Stack

1.stack是vector的子类,数据结构与扩容方式与vector相同

2.特点:先进后出FILO  or 后进先出LIFO

CopyOnWriteArrayList

1.数据结构:数组:Object[] array

2.线程安全:

  • 通过“ReentrantLock”锁实现
  • CopyOnWrite:"写入"操作时,先进行数组复制,然后在新数组中进行写入操作,然后替换;允许读写同时进行;

1.2 Set接口 

1.2.1 特点

        set的特点是无序,不允许重复(值唯一)

1.2.2 常见实现类
HashSet

1.特点:无序

2.数据结构:HashMap

LinkedHashSet

1.特点:有序

2.数据结构:LinkedHashMap

TreeSet

1.特点:自动排序

2.数据结构:TreeMap

1.3 Queue接口 

1.3.1特点

        Queue的特点是先进先出FIFO,队头出队,队尾入队;

1.3.2常见实现类
(1).线程不安全
LinkedList

        LinkedList基于“双向链表”实现的队列

PriorityQueue

        PriorityQueue基于“堆”实现的优先队列    

(2)线程安全
BlockingQueue

阻塞队列:

  • ArrayBlockingQueue(有界)
  • LinkedBlockingQueue(无界)

二、Map接口 (键值对集合)

1.实现类

(1).线程不安全
HashMap

1.特点:无序

2.数据结构:数组(哈希表)+ 链表(链地址法解决哈希表冲突) + 红黑树(自平衡二叉树,提高查找效率)          

3.转换成红黑树的条件:链表的元素个数超过8,并且数组长度大于等于64

4.转换成红黑树的优点:

  • 链表过长,会导致搜索效率降低,使用红黑树提高查找效率;
  • 红黑树,是一颗自平衡的二叉查找树,树中所有节点均自动排序,并且自平衡,可以使用二分查找,提高查找效率。 

5.扩容条件:

  • 默认情况下,数组长度为16(自定义时,必须保证数组长度为2^n 次幂)
  • 达到扩容阈值threshold,按照2倍进行扩容
  • 链表长度大于8,数组长度小于64 
LinkedHashMap 

1.特点:有序

2.数据结构:HashMap的子类,多维护了一条双向链表,保存顺序

TreeMap 

1.特点:自动按照key排序

2.数据结构:红黑树 

(2).线程安全 

Hashtable

1.特点:无序、key和value不允许为null

2.数据结构:数组+链表

3. 线程安全:通过“synchronized”同步锁实现

ConcurrentHashMap

1.特点:无序

2.数据结构:数组+链表+红黑树 

3.线程安全:synchronized同步锁 + CAS无锁化编程模型

三、Collections工具类

        封装了集合的常见算法和操作 

 

  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值