惊呆了!LinkedList的这些队列功能,99%的程序员都没用过!

简介: 【6月更文挑战第18天】`LinkedList`不仅是Java集合中的列表实现,还可作队列(`peek()`,`add()`,`remove()`)和双端队列(`Deque`,`addFirst()`,`addLast()`,`peekFirst()`,`peekLast()`),甚至栈(`push()`,`pop()`,`peek()`)。常被低估,其实它具备从两端操作数据的强大能力,适合多种数据结构需求。

在Java的集合框架中,LinkedList是一个广为人知的类,它常常被用于实现列表功能。然而,除了作为列表,LinkedList还拥有许多强大的队列功能,这些功能却鲜为人知,据统计,高达99%的程序员并未深入使用过。今天,我们就来探索那些被忽视的LinkedList队列功能,将它们与常规用法进行比较,揭示它们的强大之处。

1. 用作基本队列

首先,我们来看看LinkedList作为基本队列的使用,这是大多数程序员所熟知的功能。

LinkedList<String> queue = new LinkedList<>();
queue.add("A");
queue.add("B");
queue.add("C");

System.out.println("头部元素:" + queue.peek()); // 输出 "A"
while (!queue.isEmpty()) {
   
    System.out.println(queue.remove()); // 依次输出 "A", "B", "C"
}

在这个例子中,我们使用add方法添加元素到队列,使用peek查看队列头部元素,使用remove移除并返回队列头部元素。

2. 用作双端队列(Deque)

然而,LinkedList不仅仅支持队列接口,它还直接实现了Deque接口,这意味着它可以从两端添加或移除元素,这一功能却常常被忽视。

LinkedList<String> deque = new LinkedList<>();
deque.addFirst("A");
deque.addLast("B");
deque.addLast("C");

System.out.println("头部元素:" + deque.peekFirst()); // 输出 "A"
System.out.println("尾部元素:" + deque.peekLast()); // 输出 "C"
while (!deque.isEmpty()) {
   
    System.out.println(deque.removeFirst()); // 依次输出 "A", "B", "C"
}

3. 用作栈(Stack)

除此之外,LinkedList还可以被当作栈使用,这又是另一个被大多数程序员忽略的功能。

LinkedList<String> stack = new LinkedList<>();
stack.push("A");
stack.push("B");
stack.push("C");

System.out.println("栈顶元素:" + stack.peek()); // 输出 "C"
while (!stack.isEmpty()) {
   
    System.out.println(stack.pop()); // 依次输出 "C", "B", "A"
}

总结

通过上述比较,我们可以看到LinkedList不仅仅是一个简单的列表,它的队列、双端队列和栈的功能都极具实用性,但遗憾的是,这些功能在日常开发中往往被忽视。希望本文能够启发大家重新认识LinkedList,深入挖掘并充分利用它的潜力,以编写出更加高效和多样化的代码。

相关文章
|
4月前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
4月前
|
存储 Java
【Java集合类面试二十九】、说一说HashSet的底层结构
HashSet的底层结构是基于HashMap实现的,使用一个初始容量为16和负载因子为0.75的HashMap,其中HashSet元素作为HashMap的key,而value是一个静态的PRESENT对象。
|
6月前
|
Java 开发者
揭秘!LinkedList是如何华丽变身成为Java队列之王的?
【6月更文挑战第18天】Java的`LinkedList`既是列表也是队列之星,实现`Queue`接口,支持FIFO操作。其内部的双向链表结构确保了添加/移除元素的高效性(O(1)),适合作为队列使用。它线程不安全,但可通过同步包装用于多线程环境。此外,`LinkedList`还能灵活变身栈或双端队列,提供多种数据结构功能。
66 11
|
7月前
|
Java
面试官:说一说CyclicBarrier的妙用!我:这个没用过...
【5月更文挑战第5天】面试官:说一说CyclicBarrier的妙用!我:这个没用过...
51 2
|
7月前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
55 0
|
7月前
|
设计模式 C语言 C++
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
【C++进阶(六)】STL大法--栈和队列深度剖析&优先级队列&适配器原理
|
Cloud Native
【刷题日记】641. 设计循环双端队列
【刷题日记】641. 设计循环双端队列
数据结构之手撕链表(讲解➕源代码)-1
数据结构之手撕链表(讲解➕源代码)
数据结构之手撕链表(讲解➕源代码)-2
数据结构之手撕链表(讲解➕源代码)-2
|
设计模式 存储 安全
Java的第十三篇文章——JAVA多线程(后期再学一遍)
Java的第十三篇文章——JAVA多线程(后期再学一遍)
下一篇
DataWorks