一、前言
之前的两篇博客我们根据栈和队列后进先出、先进先出的特点对这两种数据结构用顺序表和链表分别进行了实现,也有了一定的了解,这篇我们就来介绍一下标准库中的栈和队列
二、栈
2.1 标准库中的栈
标准库中的Stack是一个class
2.2 栈的操作
public class Main {
public static void main(String[] args) {
Stack<Integer> stack=new Stack<>();
//入栈
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
Integer cur=stack.peek();
System.out.println(cur);
while(!stack.empty()){
Integer cur=stack.pop();
System.out.println(cur);
}
}
}
2.3 栈操作的注意事项
1.标准库中的stack如果针对空栈pop或者peep就会抛出空栈异常.
2.由于标准库中的Stack是继承自Vector的类,Vector能执行的操作,Stack也一样可以,Stack并没有起到限制灵活性的效果,反而增加了代码的复杂程度,实际使用Stack尽量避免这些本不该是Stack的操作,如下:
stack.add(2,100);
stack.get(0);
stack.contains(2);
三、队列
3.1 标准库中的队列
标准库中的队列是一个接口,只能实例化一个实现Queue接口的类,标准库中的队列是基于链表实现的
3.2 队列的操作
public class Main {
public static void main(String[] args) {
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
queue.offer(4);
Integer cur=queue.peek();
System.out.println(cur);
while(!queue.isEmpty()){
Integer cur=queue.poll();//元素为空返回null
//Integer cur=queue.remove();//元素为空抛出异常
System.out.println(cur);
}
}
}
3.3 队列操作的注意事项
1.与只提供一组操作的栈不同,队列提供两组操作,他们的基本操作方法命名规则也是不统一,如下图,根据返回的方式不同标准库为队列设计了两组方法,由上至下分别是:入队列,出队列,取队首元素:
抛出异常 | 返回特殊值 |
---|---|
add(e) | offer(e) |
remove() | poll() |
element() | peek() |
2…栈和队列中,判空操作和一般的List风格也不一致:
当判断一个栈是否为空时,使用stack.empty()与stack.isEmpty()均可,只是两个方法存在的类不同.
队列中则没有empty方法,判空就使用queue.isEmpty()即可.
至此,关于标准库中栈和队列的基本操作方法就介绍完毕了,栈和队列作为我们解决问题的重要数据结构我们在下条博客会分析一些基于栈和队列展开的代码编程问题.