常见的集合框架主要包括List,Set和Map这三个接口:
List接口:
是一个有序的集合,允许元素重复。实现类:
ArrayList:
- 底层数据结构式动态数组
- 查询操作性能较好,时间复杂度为O(1),插入删除为O(n)
LinkedList:
- 底层数据结构式双向链表
- 插入和删除效率较高,时间复杂度为O(1),随机访问性能较差
Vector:
- 底层数据结构是数组,但是是线程安全的
- 每个方法都通过synchronized关键字保证了同步,但也导致了性能下降。
Ser接口:
是一个不允许重复的集合,实现类:
HashSet:
- 底层数据结构:哈希表(基于HashMap实现)
- 元素无序,允许null元素,对数据的操作依赖于对象的hashCode()和euqals()方法
LinkedHashSet:
- 底层数据结构:哈希表+双向链表
- 与HashSet类似,但他维护了插入顺序
TreeSet:
- 底层数据结构:红黑树
- 元素时有序的,排序可以是自然排序或者通过Comparator实现自定义排序,插入、删除和查找的时间复杂度为O(log n);
Map接口:
是一种键值对存储的数据结构,实现类:
HashMap:
- 底层数据结构:哈希表(数组+链表+红黑树)
- 通过hashCode()和equals()来判断键的唯一性,允许null键和null值。
LinkedHashmap:
- 底层数据结构:哈希表+双向链表
- 继承自HashMap,并且维护了键值对的插入顺序,运行顺序遍历
TreeMap:
- 底层数据结构:红黑树
- 键值对按自然顺序或自定义排序存储
HashTable:
- 底层数据结构:哈希表
- 是线程安全的,每个方法都用synchronized关键字同步,不允许null键和null值
Queue接口:
是一种先进先出的集合,实现类:
PriorityQueue:
- 底层数据结构:二叉堆(基于数组)
- 元素按照优先级排序,默认是自然排序,可以通过Comparator实现自定义排序
LinkedList:
- 底层数据结构:双向链表
- 可以作为List的实现类,也可以是Queue或Deque(双端对垒的实现类)
Deque接口:
是一种双端队列,可以从两端插入或删除元素,实现类:
ArrayDeque:
- 底层数据结构:循环数组
- 相比LindkedList,性能更好,适用于栈。队列和双端队列的操作
LinkedList