Java集合-2(queue,deque,stack)
queue(队列)
- queue集合实现了队列这种数据结构。队列的特点就是先进先出(FIFO),且只能从队尾进,只能从队头出。
- Queue只是接口,其常用实现类为LinkedList。
Queue<String> q = new LinkedList<>();
- Queue接口提供的常用的方法如下:
int size() //获取Queue集合的大小
boolean add(E e)/boolean offer(E e) //将元素添加到队尾(入队操作)
E remove()/E poll() //获取队头元素,并将队头元素从队列中删除(出队操作)
E element()/E peek() //获取队头元素,但是不将队头元素从队列中删除
对于入队操作,出队操作,获取队头元素,每种操作都有两个函数,在函数执行失败时,两个函数的行为是不一样的。
抛出异常 | 返回null或false | |
---|---|---|
入队操作 | boolean add(E e) | boolean offer(E e) |
出队操作 | E remove() | E pool() |
获取队头元素 | E element() | E peek() |
Queue使用的一个例子:
import java.util.*;
public class QueuePractice{
public static void main(String[] args) {
Queue<String> q = new LinkedList<>();
q.offer("gong");
q.offer("guan");
while(q.peek() != null) {
System.out.println(q.poll());
}
}
}
Deque
- Deque和Queue的区别:Queue为单向队列,只能队尾进,队头出;Deque为双向队列,队尾可以进也可以出,队头可以进,也可以出。
- Deque也只是接口,其常用实现类也为LinkedList。
- Deque接口提供的常用方法
抛出异常 | 返回false获取null | |
---|---|---|
向队头插入元素 | boolean addFirst(E e) | boolean offerFirst(E e) |
从队头获取并删除元素 | E removeFirst() | E pollFirst() |
从队头获取元素,但不删除 | E getFirst() | E peekFirst() |
向队尾插入元素 | boolean addLast(E e) | boolean offerLast(E e) |
从队尾获取并删除元素 | E removeLast() | E pollLast() |
从队尾获取元素,但不删除 | E getLast() | E peekLast() |
- deque的使用和Queue类似,还是贴一个简单的例子吧。
import java.util.*;
public class DequePractice{
public static void main(String[] args) {
Deque<String> dq = new LinkedList<>();
dq.offerLast("gong");
dq.offerFirst("guan");
while(dq.peekFirst() != null) {
System.out.println(dq.pollFirst());
}
}
}
Stack
- 相比于Queue的先进先出特点,Stack的特点是先进后出。需要注意的是,java中没有实现Stack接口,而是用Deque来对栈进行模拟。
- Deque提供了以下函数用于对栈操作(当把Deque当成栈来使用时,不要调用其作为Deque时的方法)
void push(E e); //入栈
E pop(); //出栈
E peek(); //获取栈顶元素
- Stack使用了例子:
import java.util.*;
public class StackPractice{
public static void main(String[] args) {
Deque<String> stack = new LinkedList<>();
stack.push("gong");
stack.push("guan");
while(stack.peek() != null) {
System.out.println(stack.pop());
}
}
}