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

相关文章
|
3月前
|
安全 Java 容器
【Java集合类面试二十七】、谈谈CopyOnWriteArrayList的原理
CopyOnWriteArrayList是一种线程安全的ArrayList,通过在写操作时复制新数组来保证线程安全,适用于读多写少的场景,但可能因内存占用和无法保证实时性而有性能问题。
|
3月前
|
Java
【Java集合类面试十九】、说一说你对LinkedHashMap的理解
LinkedHashMap通过维护一个双向链表来保证key-value对的迭代顺序与插入顺序一致,它提供了HashMap的性能和有序迭代的特性,但相比HashMap性能略低。
|
6月前
|
Java
面试官:说一说CyclicBarrier的妙用!我:这个没用过...
【5月更文挑战第5天】面试官:说一说CyclicBarrier的妙用!我:这个没用过...
43 2
|
6月前
|
设计模式 搜索推荐 Java
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
49 0
|
6月前
|
缓存 Java 程序员
程序员的金三银四:创建线程池有哪几种方式?
程序员的金三银四:创建线程池有哪几种方式?
63 0
|
6月前
|
前端开发 JavaScript 算法
万万没想到,React 优先级队列的实现方式,跟我书里写的一模一样
万万没想到,React 优先级队列的实现方式,跟我书里写的一模一样
|
12月前
|
存储
数据结构之手撕链表(讲解➕源代码)-1
数据结构之手撕链表(讲解➕源代码)
|
12月前
|
缓存
数据结构之手撕链表(讲解➕源代码)-2
数据结构之手撕链表(讲解➕源代码)-2
|
设计模式 存储 安全
Java的第十三篇文章——JAVA多线程(后期再学一遍)
Java的第十三篇文章——JAVA多线程(后期再学一遍)