Java 集合 -- Queue
使用 Queue
队列(Queue)是一种经常使用的集合。Queue实际上是实现了一个先进先出(FIFO:First In First Out)的有序表。
它和List的区别在于,List可以在任意位置添加和删除元素,而Queue只有两个操作:
-
把元素添加到队列末尾;
-
从队列头部取出元素。
在Java的标准库中,队列接口Queue定义了以下几个方法:
-
int size():获取队列长度;
-
boolean add(E)/boolean offer(E):添加元素到队尾;
-
E remove()/E poll():获取队首元素并从队列中删除;
-
E element()/E peek():获取队首元素但并不从队列中删除。
注意:不要把null添加到队列中,否则poll()方法返回null时,很难确定是取到了null元素还是队列为空。
接下来我们以poll()和peek()为例来说说“获取并删除”与“获取但不删除”的区别。
对于Queue来说,每次调用poll(),都会获取队首元素,并且获取到的元素已经从队列中被删除了:
public class QueueMain {
public static void main(String[] args){
Queue<String> q = new LinkedList<>();
// 添加三个元素
q.add("apple");
q.add("pear");
q.add("banana");
// 从队列中取出元素
System.out.println(q.poll()); // apple
System.out.println(q.poll()); // pear
System.out.println(q.poll()); // banana
System.out.println(q.poll()); // null ,队列为空
}
}
如果用peek(),因为获取队首元素时,并不会从队列中删除这个元素,所以可以反复获取:
public class QueueMain {
public static void main(String[] args){
Queue<String> q = new LinkedList<>();
// 添加三个元素
q.add("apple");
q.add("pear");
q.add("banana");
// 从队列中取出元素
// 队首永远都是apple,因为peek()不会删除它
System.out.println(q.peek()); // apple
System.out.println(q.peek()); // apple
System.out.println(q.peek()); // apple
}
}
从上面的代码中,我们还可以发现,LinkedList既实现了List接口,又实现了Queue接口.
在使用的时候,如果我们把它当作List,就获取List的引用,如果我们把它当作Queue,就获取Queue的引用:
// 这是一个List:
List<String> list = new LinkedList<>();
// 这是一个Queue:
Queue<String> queue = new LinkedList<>();
始终按照面向抽象编程的原则编写代码,可以大大提高代码的质量。
每天学习一点点,每天进步一点点。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 想让你多爱自己一些的开源计时器
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 大模型 Token 究竟是啥:图解大模型Token
· 如何在 .NET 中 使用 ANTLR4
· 用99元买的服务器搭一套CI/CD系统