栈(Stack)
import java.util.Stack; //引用栈
//初始化
Stack<Integer> stack = new Stack<Integer>();
//进栈
stack.push(Element);
//出栈取栈顶值
stack.pop();
//不出栈取栈顶值
stack.peek();
//判断栈是否为空
stack.isEmpty()
链表(LinkedList)
import java.util.LinkedList; //引用链表
//初始化
LinkedList<Integer> list =new LinkedList<>();
增加:
add(E e):在链表后添加一个元素; 通用方法
addFirst(E e):在链表头部插入一个元素; 特有方法
addLast(E e):在链表尾部添加一个元素; 特有方法
push(E e):与addFirst方法一致
offer(E e):在链表尾部插入一个元素 add(int index, E element):在指定位置插入一个元素。
offerFirst(E e):JDK1.6版本之后,在头部添加; 特有方法 offerLast(E e):JDK1.6版本之后,在尾部添加; 特有方法
删除:
remove() :移除链表中第一个元素; 通用方法
remove(E e):移除指定元素; 通用方法
removeFirst(E e):删除头,获取元素并删除; 特有方法
removeLast(E e):删除尾; 特有方法
pollFirst():删除头; 特有方法
pollLast():删除尾; 特有方法
pop():和removeFirst方法一致,删除头。
poll():查询并移除第一个元素 特有方法
查:
get(int index):按照下标获取元素; 通用方法
getFirst():获取第一个元素; 特有方法
getLast():获取最后一个元素; 特有方法
peek():获取第一个元素,但是不移除; 特有方法
peekFirst():获取第一个元素,但是不移除;
peekLast():获取最后一个元素,但是不移除;
pollFirst():查询并删除头; 特有方法
pollLast():删除尾; 特有方法
poll():查询并移除第一个元素 特有方法
队列
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
Deque<Integer> queue = new LinkedList<>();
add方法 往队列尾部加入元素
addFirst方法 往队列首部加入元素
addLast方法 往队列尾部加入元素
contains方法 判断队列中是否包含某个元素
descendingIterator方法 以相反的顺序返回deque
element方法 检索但不删除返回队列的头部
getFirst方法 与element相同,检索但不删除返回第一个元素,具体不知道为什么会有重复的方法,应该是版本更新兼容吧,就语义来说这个好一点
getLast方法 检索并返回最后一个元素
iterator方法 以正确的顺序返回此元素的迭代器
offer方法 将指定元素插入该元素的尾部,返回true或者false,与add的区别是add当没有可用空间时会抛异常,而offer返回false
offerFirst方法 在双端队列头部插入元素
offerLast方法 在双端队列尾部插入元素,同offer一样,为了Queue和Deque兼容
peek()方法和peekFirst/peekLast方法 返回但不删除双端队列的首元素/尾元素
poll方法和pollFirst/pollLast方法 poll检索并删除队列的首元素,pollFirst也是,pollLast检索并删除队列的尾元素
pop方法 pop从这个deque表示的堆栈中弹出一个元素,与poll不同的是pop当为空时会报异常,而poll会返回null
push方法 在此deque的首部添加元素
remove方法以及removeFirst/removeLast方法 remove和removeFirst检索并删除队列中第一个元素,removeLast检索并删除队列中最后一个元素(同poll相同,就不演示了)
size方法 返回元素数
Stack,ArrayDeque,LinkedList的区别
* 1. 三者都是 Collection的间接实现类。ArrayDeque实现Deque接口,Stack继承于Vector,LinkedList实现Deque与List接口。
* 2. Stack底层是长度为 10的数组,ArrayDeque底层是长度为 16的数组,LinkedList底层是链表
* 3. Stack是线程安全,其余均为线程不安全。
* 4. 频繁的插入、删除操作:LinkedList
* 频繁的随机访问操作:ArrayDeque
* 未知的初始数据量:LinkedList
用法概要
*
* 针对链表
* add:增加元素
* remove:删除元素
*
* 队列
* poll;弹出队头
* offer:在队尾加入新的元素
*
* 栈
* pop:弹出栈顶元素
* pull:栈顶加入元素