集合概述
集合就是对象的容器
List(有序集合)
- Vector和ArrayList
- 不同点
- ArrayList: 1.线程不安全 2.速度快 3. 长度增长率为50%
- Vector: 1.线程安全 2.速度慢 3. 长度增长率为100%
- 相同点
- 都是采用动态数组方式存储数据
- 查询数据的时间成本相同
- 插入数据慢(因为涉及到移动数据)
- 动态数组的原理 --> 创建一个更长的新数组,再将老数组里的数据拷贝进来
- 不同点
- ArrayList和LinkedList(都不是线程安全的)
-
ArrayList: 1.底层用数组实现 2.查询快 3. 随机插入和删除慢(要移动数据)
-
LinkedList: 1.底层用双向链表实现 2.查询慢 3. 随机插入和删除快
-
我们可以用如下方法得到一个线程安全的List
List list = Collections.synchronizedList(new LinkedList(…));
-
- Stack继承自Vector,实现一个后进先出的堆栈
Set(无序集合,元素不可重复)
- 元素是否相同是靠重写equals()和hashCode()方法来判定的
- HashSet和LinkedHashSet(都是接口Set的实现,两者都不能保存重复的数据)
- HashSet: 无顺序
- LinkedHashSet: 有顺序
- SortedSet(接口)
- TreeSet(SortedSet的实现类) --> 排序的元素需要实现Comparable接口,并重写compareTo(Object obj)方法
Map
- HashMap和HashTable
- HashMap: 1.线程不安全 2.轻量级 3.允许key或value是null
- HashTable: 1.线程安全 2.重量级 3.不允许key或value是null
- TreeMap --> 以红黑树数据结构实现,实现了SortedMap接口
- Properties -->继承自Hashtable,线程安全,键值都是字符串
Queue
分如下两种
- 阻塞式队列,队列满了以后再插入元素则会抛出异常,主要包括ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue
- 双端队列,支持在头、尾两端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList