目录
set-CopyOnWriteArraySet/ConcurrentSkipListSet
1. 结构图
Collection
Map
2. Collection
2.1. List集合(有序)
ArrayList集合
- 使用索引来查找元素,查询效率较高
- ArrayList的末尾进行插入和删除操作非常高效,因为它只涉及数组的末尾元素。
- 但是:在ArrayList的中间进行插入和删除操作,需要移动后续元素,因此效率较低;在这种情况下,使用LinkedList可能更适合。
Vector集合
- Vector是线程安全的,它的所有方法都是同步的(synchronized);然而:由于同步机制的存在,Vector的性能相对较低
- 与ArrayList一样:末尾进行插入和删除操作非常高效,因为它只涉及数组的末尾元素。
- 在中间插入和删除操作时,Vector由于需要移动后续元素和进行同步,效率较低。
LinkedList集合
- LinkedList的底层数据结构是双向链表。每个节点都包含一个存储元素的值和两个指针,一个指向前一个节点,一个指向后一个节点。
- LinkedList中插入和删除元素更加高效,因为它只需要修改相邻节点的指针,而不需要像ArrayList那样移动后续元素。
- 访问LinkedList中的元素,需要从头节点或尾节点开始遍历链表,直到找到目标元素。因此,LinkedList在随机访问方面的性能较差。
遍历方式
2.2. Set集合(无序)
HashSet
- 无序性:HashSet中的元素是无序的
- 唯一性:HashSet不允许存储重复的元素
- 允许空元素:HashSet可以存储空元素(null),并且只能存储一个空元素
- 基于哈希表实现:HashSet的底层数据结构是哈希表(HashMap),底层实现是HashMap
- 底层HashMap是:底层维护了Node类型的数组table(Node数组+单向链表+红黑树)
- 详见HashMap说明
TreeSet(有序的)
- TreeSet是一个有序、不允许重复元素的集合,底层使用红黑树实现。它的特点包括有序性、唯一性、使用比较器进行元素的排序和比较,以及提供了快速的查找和导航操作。
- 红黑树保持了集合的有序性和平衡性,使得TreeSet具有较高的性能。
2.3. Queue
BlockingQueue:阻塞队列
3. Map
Hashtable
- Hashtable是线程安全的集合;synchronized
- 不允许空键和空值:Hashtable不允许存储空键(null)和空值(null)
- 底层:是数值+单向链表实现的
TreeMap
- TreeMap是一个有序、键唯一的集合,底层使用红黑树实现。
- 红黑树保持了集合的有序性和平衡性,使得TreeMap具有较高的性能。
- Key不能为空