容器

1.线程安全的容器都有哪些

同步容器类:
使用了synchronized
1.Vector
2.HashTable

并发容器:
3.ConcurrentHashMap:分段
4.CopyOnWriteArrayList:写时复制
5.CopyOnWriteArraySet:写时复制

Queue:
6.ConcurrentLinkedQueue
是使用非阻塞的方式实现的基于链接节点的无界的线程安全队列,性能非常好。
(java.util.concurrent.BlockingQueue 接口代表了线程安全的队列。)

7.ArrayBlockingQueue:基于数组的有界阻塞队列

8.LinkedBlockingQueue:基于链表的有界阻塞队列。

9.PriorityBlockingQueue:
支持优先级的无界阻塞队列,即该阻塞队列中的元素可自动排序。默认情况下,元素采取自然升序排列

10.DelayQueue:一种延时获取元素的无界阻塞队列。

11.SynchronousQueue:不存储元素的阻塞队列。每个put操作必须等待一个take操作,否则不能继续添加元素。内部其实没有任何一个元素,容量是0

Deque:
(Deque接口定义了双向队列。双向队列允许在队列头和尾部进行入队出队操作。)
12.ArrayDeque:基于数组的双向非阻塞队列。

13.LinkedBlockingDeque:基于链表的双向阻塞队列。

Sorted容器:
14.ConcurrentSkipListMap:是TreeMap的线程安全版本
15.ConcurrentSkipListSet:是TreeSet的线程安全版本

2.HashMap和HashSet的关系

HashSet与Map关系如下图:

1.HashSet继承于AbstractSet,并且实现了Set接口。

2.HashSet的本质是一个"没有重复元素"的集合,它是通过HashMap实现的。HashSet中含有一个"HashMap类型的成员变量"map,HashSet的操作函数,实际上都是通过map实现的。

3.ArrayList和HashMap的扩容关系

ArrayList:线程不安全,查询速度快

     底层数据结构是数组结构

     扩容增量:原容量的0.5倍+1

          如ArrayList的初始容量为10,一次扩容后容量为16

HashMap:初始容量为16

     加载因子为0.75:当元素个数超过容量长度的0.75倍时,进行扩容

     扩容增量:原容量的1倍

          如HashSet的容量为16,一次扩容后容量为32

ArrayList和HashMap的扩容关系
posted @ 2023-04-10 09:58  空空大首领  阅读(21)  评论(0编辑  收藏  举报