List接口
概述:1.List接口是Collection的直接接口,代表的是有序的Collection;
2.该接口可以对列表中的每一个元素的插入位置进行精确的控制,同时可以根据索引访问元素。
3.实现接口主要有:ArrayList、LinkedList、Vector、Stack。
Collection:Collection 层次结构 中的根接口。它表示一组对象,这些对象也称为 collection 的元素。对于Collection而言,它不提供任何直接的实 现,所有的实现全部由它的子类负责。
List:继承于Collection的接口。它代表着有序的队列。
AbstractCollection:提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。对于我们而言要实现一个不可修改的 collection,只需扩展此类,并提供 iterator 和 size 方法的实现。
AbstractList:List 接口的骨干实现,以最大限度地减少实现“随机访问”数据存储(如数组)支持的该接口所需的工作。
AbstractSequentialList:提供了 List 接口的骨干实现,从而最大限度地减少了实现受“连续访问”数据存储(如链接列表)支持的此接口所需的工 作。从某种意义上说,此类与在列表的列表迭代器上实现“随机访问”方法。。
LinkedList:List 接口的链接列表实现。它实现所有可选的列表操作。
ArrayList:该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。
Iterator:迭代器。
ListIterator:系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置
Queue:队列。提供队列基本的插入、获取、检查操作。
Deque:一个线性 collection,支持在两端插入和移除元素。大多数 Deque 实现对于它们能够包含的元素数没有固定限制,但此接口既支持有容 量限制的双端队列,也支持没有固定大小限制的双端队列。
Enumeration:枚举,实现了该接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。
应用场景:如果涉及到“栈”、“队列”、“链表”等操作,请优先考虑用List。
1.对于需要快速插入、删除元素,则需使用LinkedList;
2.对于需要快速访问元素,则需使用ArrayList;
3.根据单/多线程环境,使用线程非/安全的实现类;
其中队列和迭代器简单介绍下:
Queue
分类:1.阻塞式队列(队列满了以后再插入元素则会抛出异常)eg:ArrayBlockQueue、PriorityBlockingQueue、LinkedBlockingQueue
2.双端队列(支持在头、尾两端插入和移除元素)eg:ArrayDeque、LinkedBlockingDeque、LinkedList
Iterator 迭代器
简介:迭代可以简单地理解为遍历,是一个标准化的遍历各类容器里面的所有对象的方法类;
是一个典型的设计模式(把访问逻辑从不同容器中抽象处理,隐藏容器内部结构,返回一个标准化的访问方法);
在Java中Iterator为一个接口,它只提供了迭代了基本规则;
ArrayList (线程不安全)
简介:ArrayList是一个动态数组,也是我们最常用的集合。
特性:1.允许任何符合规则的元素插入甚至包括null,ArrayList是非同步的;
2.初始容量分配为10,每次add会进行容量检查,不足时会进行扩容;
3.适合快速访问数据(通过下标);
缺点:数组是将元素在内存中连续存放的,因此增加或删除其中一个元素都需要移动大量元素。
LinkedList (线程不安全)
简介:LinkedList是一个双向链表,除了有ArrayList的基本操作还额外提供了get,remove,insert等方法。
特性:1.允许所有元素包括null,LinkedList是非同步的;
2.不同位置添加数据方法:链头插入,链尾插入,节点前插入,节点后插入;
3.双向链表查询数据:从前往后,从后往前
4.适合插入删除操作(修改元素中指针);
缺点:链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。访问时需要从第一个元素开始,直到需要的元素。
(get方法是通过遍历来实现的)
相比ArrayList插入删除:1.linkedList不需要执行元素拷贝动作,没有牵一发而动全身的大动作;
2.查找插入位置有加速动作即:若index < 双向链表长度的1/2,则从前向后查找; 否则,从后向前查找;
Vector( 线程安全 )
简介:Vector是线程安全的动态数组,它的操作与ArrayList几乎一样。
Vector与ArrayList的比较:
Stack ( 线程安全 )
简介:Stack继承自Vector,实现一个后进先出的堆栈。
特点:1.Stack提供5个额外的方法使得Vector得以被当作堆栈使用,刚创建后是空栈;
2.push,pop,peek(获取栈顶元素),empty(检测堆栈是否为空),search(检测元素在堆栈中位置);