队列Queue
程序员文章站
2024-03-18 08:06:40
...
定义
队列Queue也是Collection的一个子接口,它也是常用的数据结构。
可以将队列看成特殊的线性表,队列限制对线性表的访问方式:
只能从一端添加(offer)元素,从另一端取出(poll)元素。
队列遵循先进先出(FIFO )的原则,实现类LinkedList也实现了该接口,选择此类实现Queue的原因在于Queue经常要进行添加和删除操作,而LinkedList在这方面效率比较高。
应用
import java.util.LinkedList;
import java.util.Queue;
public class QueueDemo {
public static void main(String[] args) {
// 定义一个队列q
Queue<String> q = new LinkedList<String>();
/*
* boolean offer(E e)
* 将指定的元素插入到此队列中。
* 即:从队尾进
*/
q.offer("aa");
q.offer("bb");
q.offer("cc");
System.out.println("队列q:"+q);//队列q:[aa, bb, cc]
/*
* E peek()
* 检索但不删除此队列的头,如果此队列为空,则返回 null 。
* 即:查看队首元素
*/
String s = q.peek();
System.out.println("队首元素:"+s);//队首元素:aa
/*
* E poll()
* 检索并删除此队列的头,如果此队列为空,则返回 null 。
* 即:移除队首元素
*/
String s1 = q.poll();
System.out.println("移除的元素:"+s1);//移除的元素:aa
System.out.println("移除后的队列:"+q);//移除后的队列:[bb, cc]
/*
* 注意:
* 当对列为空时,peek()的返回值为null
* 所以当我们进行移除队首操作时,最好先使用peek方法,
* 查看队首是否为null
*/
while(q.peek()!=null){
String s2 = q.poll();
System.out.println("移除的元素:"+s2);
/* 输出:
* 移除的元素:bb
* 移除的元素:cc
*/
}
}
}
Queue的子接口
Deque:支持两端元素插入和移除的线性集合,Queue的子接口,定义了"双端队列"的数据结构
即:两端都可以进行offer和poll操作
import java.util.Deque;
import java.util.LinkedList;
public class DequeDemo {
public static void main(String[] args) {
// 定义一个双端队列dq
Deque<String> dq = new LinkedList<String>();
/*
* boolean offerFirst(E e)
* 在此deque的前面插入指定的元素
*/
dq.offerFirst("aa");
dq.offerFirst("bb");
dq.offerFirst("cc");
System.out.println(dq);
//输出:[cc, bb, aa]
/*
* boolean offerLast(E e)
* 在此deque的末尾插入指定的元素
*/
dq.offerLast("dd");
dq.offerLast("ee");
System.out.println(dq);
//输出:[cc, bb, aa, dd, ee]
/*
* E peekFirst() 检索,但不删除,此deque的第一个元素 ----即 查看队首元素
* E peekLast() 检索但不删除此deque的最后一个元素 ----即 查看队尾元素
*/
System.out.println("队首元素:"+dq.peekFirst());//输出:队首元素:cc
System.out.println("队尾元素:"+dq.peekLast());//输出:队尾元素:ee
/*
* E pollFirst() 检索并删除此deque的第一个元素 ----即 移除队首元素
* E pollLast() 检索并删除此deque的最后一个元素 ----即 移除队尾元素
*/
System.out.println("移除的队首元素:"+dq.pollFirst());//输出:移除的队首元素:cc
System.out.println("移除队首元素后的队列:"+dq);//输出:移除队首元素后的队列:[bb, aa, dd, ee]
System.out.println("移除的队尾元素:"+dq.pollLast());//输出:移除的队尾元素:ee
System.out.println("移除队尾元素后的队列:"+dq);//输出:移除队尾元素后的队列:[bb, aa, dd]
}
}
上一篇: Java QueueDemo
下一篇: java i18n exception