目录
一、栈
栈是Vector的一个子类,它实现了一个标准的先进后出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。
方法 | 描述 |
boolean isEmpty() | 判断栈是否为空 |
Object peek() | 查看栈顶的元素,但不删除 |
Object pop() | 删除栈顶的元素,并返回 |
Object push(Object element) | 把项压入栈顶 |
int search(Object element) | 返回对象在堆栈中的位置,以 1 为基数 |
使用栈的场景:需要方向序列时,可以想到栈 1、2、3、4 —> 4、3、2、1
需要回溯的时候,可以想到栈
需要深度优先遍历的时候,可以想到栈
Java示例:
public static void main(String[] args) {
// 实现类是 LinkedList 对象
// 引用是 Deque 接口
// 变量名 stack : 表示定义了一个栈
Deque<Integer> stack = new LinkedList<>();
stack.push(100);
stack.push(200);
stack.push(300);
stack.push(400);
// 4 400 4 | 4 400 3 | 3 300 3 | 3 300 2 | 2 200 2 | 2 200 1 | 1 100 1 | 1 100 0
while (!stack.isEmpty()) {
System.out.println(stack.size());
System.out.println(stack.peek());
System.out.println(stack.size());
System.out.println("==========================");
System.out.println(stack.size());
System.out.println(stack.pop());
System.out.println(stack.size());
System.out.println("==========================\n\n");
}
}
二、队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。常见的方法:
方法 | 描述 |
add(e) | 增加一个元素,如果队列已满,抛异常 |
remove() | 移除并返回头部的元素,如果对列为空,抛异常 |
element() | 返回对列头部的元素,如果对列为空,抛异常 |
offer(e) | 添加一个元素并返回true,如果对列已满,返回false |
poll() | 移除并返回对列头部的元素,如果对列为空,则返回null |
peek() | 返回对列头部的元素,如果对列为空,则返回null |
put(e) | 添加一个元素,如果对列已满,则阻塞 |
take() | 移除并返回对列头部的元素,如果对列为空,则阻塞 |
使用对列的场景: 需要公平性
进行广度优先遍历的时候,可以想到对列
Java示例:
public static void main(String[] args) {
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue<String> queue = new LinkedList<String>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("poll=" + queue.poll()); //返回第一个元素,并在队列中删除
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("element=" + queue.element()); //返回第一个元素
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("peek=" + queue.peek()); //返回第一个元素
for (String q : queue) {
System.out.println(q);
}
}