集合学习笔记
概述
Collection是集合层次结构中的根界面,依赖于 Iterator,Map接口。
Collection下有3个重要子接口:List,Set,Queue。
Collection接口:
List:有序集合(也称为序列 )几个重要实现类:
- Arraylist: 底层使用动态数组实现。我们知道数组的长度一旦申请就无法改变,ArrayList是在数组内的负载因子(数组已用的值/数组长度)达到1时进行扩容,扩容的方式是申请一个新的数组讲旧数组的数据全部复制到新的数组中,然后销毁旧数组。ArrayList的扩容增量是0.5+1,例如:旧数组的长度为10,扩容后的数组长度为16。注意一点,当我们实例化一个ArrayList的时候如果不给于他一个长度,会默认长度为10。;
优点:因为底层是数组,数据在数组中有下标,通过下标取值速度很快,查询数据的速度快,效率高。
缺点:每一次对数组的增加和删除操作会使操作位置后面的元素移动,增删速度慢,并且非线程安全。 - **Vector:**底层同样采用动态数组实现。加载因子也是1,扩容增量为1,例如:旧数组的长度为10,扩容后的数组长度为20;默认长度也是10。
优点:查询速度快,线程安全。
缺点:增删操作速度慢,效率低。 - **LinkedList:**底层采用双向链表的数据结构,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,双向链表是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表;