java.util.Queue
- Queue接口继承自Collection
- 队列可以保存一组元素,但是存取元素必须遵循先进先出
我们一般存取元素,用Collection,解决像排队这样的特殊需求才用队列。
ArrayList没有实现Queue接口
LinkedList继承Deque,双端队列继承Queue
1.队列
1.1 入队—offer()
队列是先进先出的规则,队首添加元素,队尾删除元素(出队)
Queue<String> queue = new LinkedList<>();
queue.offer("one");
queue.offer("two");
queue.offer("three");
queue.offer("four");
queue.offer("five");
System.out.println(queue);//[one, two, three, four, five]
//出队操作,获取队首元素并将其从队列中移除
/*
* 迭代器
* 遍历队列,遍历后元素还在队列中
*/
for(String s:queue){
System.out.println(s);
}
while(queue.size()>0){
System.out.println(queue.poll());
}
System.out.println("poll遍历后的queue"+queue);//空了
1.2 出队—poll()
String one = queue.poll();//出队
System.out.println(one);//one
System.out.println(queue);//[ two, three, four, five]
//引用队首元素,不会将其从队列中移除
one = queue.peek();
System.out.println(one);//two
System.out.println(queue);//[ two, three, four, five]
peek()方法时每次输出的都是队首元素,并不会对队列本身产生影响(不会删除或添加元素的)
1.3 遍历队列
两种方法:一种迭代器,一种是传统方法(要注意队列长度会随时变化的)
for(String s:queue){
System.out.println(s);
}
/*
*two
*three
*four
*five
*/
while(queue.size()>0){
System.out.println(queue.poll());
}
System.out.println("poll遍历后的queue"+queue);//[ ]
2.双队列
java.util.Deque 双端队列
- Deque接口继承自Queue接口,双端队列是队列两端都可以做进出对操作的队列
- 常用实现类:java.util.LinkedList
- pollFirst-offreLast
- offerFirst-pollLast
2.1 入队—offer()或offFirst()或offLast()
Deque<String> deque = new LinkedList<>();
deque.offer("one");
deque.offer("two");
deque.offer("three");
System.out.println(deque);//[one, two, three]
//offerFirst是在队首入队
deque.offerFirst("four");
System.out.println(deque);//[four, one, two, three]
deque.offerLast("five");
System.out.println(deque);//[four, one, two, three,five]
2.2 出队—poll()或pollFirst()或pollLast()
deque.pollFirst();//队首出队
deque.pollLast();//队尾出队
System.out.println(deque);//[one, two, three]
System.out.println(deque.poll());//one
poll()默认在队首出队
3.栈
- push=offerFirst
- pop=pollFirst
- 栈结构:栈可以保存一组元素,但是存取元素必须遵循:先进后出
- 通常使用栈可以完成“后退”这样的功能
3.1 进栈—push()
Deque<String> stack = new LinkedList<>();
stack.push("one");
stack.push("two");
stack.push("three");
stack.push("four");
stack.push("five");
System.out.println(stack);//进栈[five, four, three, two, one]
3.2 出栈—pop()
String str = stack.pop();
System.out.println(str);//five
System.out.println(stack);//[four, three, two, one]