惊呆了!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,深入挖掘并充分利用它的潜力,以编写出更加高效和多样化的代码。

相关文章
|
8月前
|
存储 前端开发 C++
【C++从0到王者】第十七站:手把手教你写一个stack和queue及deque的底层原理
【C++从0到王者】第十七站:手把手教你写一个stack和queue及deque的底层原理
52 0
|
2月前
|
Java API
面试官上来就让手撕HashMap的7种遍历方式,当场愣住,最后只写出了3种
面试官上来就让手撕HashMap的7种遍历方式,当场愣住,最后只写出了3种
26 1
|
2月前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
25 0
|
7月前
|
存储 算法 Java
史上最全的Java容器集合之基础数据结构(手撕链表)
史上最全的Java容器集合之基础数据结构(手撕链表)
96 0
|
9月前
|
设计模式 存储 安全
Java的第十三篇文章——JAVA多线程(后期再学一遍)
Java的第十三篇文章——JAVA多线程(后期再学一遍)
|
9月前
|
域名解析 网络协议 Oracle
Java的第十五篇文章——网络编程(后期再学一遍)
Java的第十五篇文章——网络编程(后期再学一遍)
《Java小子怒闯数据结构九重天》第四重天——队列
自古以来数据结构界就分为九重天,据说冲破这九重天之后就可以去进攻算法界最终修炼最后成佬,受万人敬仰,现在来讲一下第四重。
《Java小子怒闯数据结构九重天》第四重天——队列
|
存储 Java 索引
让面试官喝碗鸡汤,给他讲讲ArrayList和LinkedList的区别
ArrayList和LinkedList作为我们Java中最常使用的集合类,很多人在被问到他们的区别时,憋了半天仅仅冒出一句:一个是数组一个是链表。这样的回答简直让面试官当场吐血。为了和兄弟们一起打好基础,我们通过实际的使用测试,来好好说一下ArrayList和LinkedList的区别这道经典的面试题。
165 0