Stack与Queue
1、Stack
stack的底层是动态数组
2、Queue
Queue的底层是继承了Collection。
2.1 数组的顺序存储结构你概述
可以实现循环队列
最好的方法就是添加外部指针用来保存“队头”和“队尾”。时间复杂度都是O(1);如果不是循环队列可能会导致数组索引溢出
###2.2 队列的链式存储结构
单链表。尾插法。保存头部指针
3、stack 和queue的迭代
stack继承自ListIterator。而队列继承的是iterator接口
ArrayList首先实现了Iterator接口,实现类为Itr。ArrayList中iterator()方法返回的是Itr对象。ArrayList中Listiterator方法进行了重载,有两种调用ListItr的方法
LinkedList实现了ListIterator接口,实现类为ListItr。
LinkedList中还有一个DescendingIterator实现了Iterator接口,反向遍历,还是借助ListItr实现的
Iterator与ListIterator:
是一个功能更加强大,继承与Iterator接口,只能用于各种List类型的访问。
区别:
-
- ListIterator有add方法,可以向List中添加对象,而Iterator不可以
-
- List Iterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历。但是:ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
- ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
- 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。