集合概述
介绍
Java集合,也被称为容器。主要由两大类接口派生而来:
- Colleciton:主要存储单一对象
- Map:主要存储键值对(两个对象的映射关系)
分类
Collection
List
存储的对象有序,可重复
- ArrayList:基于动态数组实现,支持随机访问,线程不安全。【最常用】
- Vector:基于动态数组实现,线程安全,效率低。【几乎不用】
- LinkedList:基于双向链表实现(JDK1.6之前循环链表,JDK1.7去除循环),仅支持顺序访问。【不常用】
Queue
存储的对象有序,可重复,且可以按照一定的规则进行排序 \
Queue:接口,单端队列。
Deque:接口,继承Queue,双端队列。ArrayQueue和LinkedList都实现了Deque
- PriorityQueue:基于二叉堆结构实现,用来实现优先队列。
- ArrayQueue:基于动态数组和双指针实现,用来实现栈和队列。
- LinkedList:基于双向链表实现,用来实现双向队列。
Set
存储的对象是不可以重复的
- HashSet:基于HashMap实现,支持快速查找,查找时间复杂度O(1)。
- TreeSet:基于红黑树实现,支持有序操作,查找时间复杂度O(logN)。
- LinkedHashSet:继承HashSet,使用双向链表维护元素的插入顺序,查找时间复杂度O(1)。
Map
使用键值对(K-V)进行存储,“K”:key,无序,唯一;“V”:value,无序,可重复
- HashMap:JDK1.8之前基于数组+链表实现,JDK1.8之后基于数组+链表+红黑树实现。
- TreeMap:基于红黑树实现。
- HashTable:和HashMap类似,线程安全【不常用,可以使用ConCurrentHashMap代替HashTable来支持线程安全,效率更高】
- LinkedHashMap:继承HashMap,使用双向链表维护元素的插入顺序。
容器的优点:
- 提高编程效率
- 提高程序性能
- 简化设计难度
- 提高代码重用性