版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86690649
1 队列
1.1 Queue(单向)
- 队列通常 FIFO (先进先出)
- 优先级队列和堆栈 LIFO (后进先出)
1.2 Deque (双向,双端访问)
1.3 测试(模拟银行业务)
package day04.que;
import java.util.ArrayDeque;
import java.util.Queue;
/*
* 使用队列模拟银行存款业务
* */
public class Demo1 {
public static void main(String[] args) {
Queue<Request> que = new ArrayDeque<>();
for (int i = 0; i < 10; i++) {
final int num = i;
que.offer(new Request() {
@Override
public void deposit() {
System.out.println("第" + num + "个人办理存款业务,存款额度:" + Math.random() * 10000);
}
});
}
dealWith(que);
}
//处理存款业务
public static void dealWith(Queue<Request> que) {
Request req = null;
while (null != (req = que.poll())) {
req.deposit();
}
}
}
interface Request {
//存款
void deposit();
}
1.4 自定义堆栈
MyStack.java
package day04.que;
import java.util.ArrayDeque;
import java.util.Deque;
/*
* 使用队列实现自定义堆栈
* 1. 弹
* 2. 压
* 3. 获取头
*
* */
public class MyStack<E> {
private Deque<E> container = new ArrayDeque<E>();
private int cap;
public MyStack(int cap) {
this.cap = cap;
}
public boolean push(E e) {
if (container.size() + 1 > cap) {
return false;
}
return container.offerLast(e);
}
public E pop(){
return container.pollLast();
}
public int size(){
return container.size();
}
}
Demo2.java
package day04.que;
public class Demo2 {
public static void main(String[] args) {
MyStack<String> backHistory = new MyStack<>(3);
backHistory.push("AAA");
backHistory.push("BBB");
backHistory.push("CCC");
backHistory.push("DDD");
System.out.println("大小:" + backHistory.size());
String item = null;
while (null != (item = backHistory.pop())) {
System.out.println(item);
}
}
}