Java集合Collection之LinkedList

LinkeList

LinkedList(双向链表)是一种常见的线性数据结构,但是并不会按线性的顺序存储数据。它由一系列节点组成,每个节点包含数据部分和一个指向下一个节点的引用。相比于数组,链表具有动态大小、插入和删除效率高的优点,但访问元素的效率较低。


一、应用场景

1.设计队列

如下是一个排队叫号的小例子:

java 复制代码
//应用场景1:排队叫号
LinkedList<String> queue = new LinkedList<>();
//开始排队
queue.addLast("1号病人");
queue.addLast("2号病人");
queue.addLast("3号病人");
queue.addLast("4号病人");
queue.addLast("5号病人");
System.out.println(queue);
//开始出队
//1号看完病
System.out.println(queue.removeFirst());
//2号看完病
System.out.println(queue.removeFirst());
//3号看完病
System.out.println(queue.removeFirst());
//6号挂号开始排队
queue.addLast("6号病人");
System.out.println(queue);


结果:

[1号病人, 2号病人, 3号病人, 4号病人, 5号病人]
1号病人
2号病人
3号病人
[4号病人, 5号病人, 6号病人]

2.设计栈

场景如下:

java 复制代码
 //应用场景2:设计栈【先进后出,后进先出】
        System.out.println("----------------应用场景2---------------");
            LinkedList<String> stack = new LinkedList<>();
            stack.addFirst("1号子弹");
            stack.addFirst("2号子弹");
            stack.addFirst("3号子弹");
            stack.addFirst("4号子弹");
            stack.addFirst("5号子弹");
            stack.addFirst("6号子弹");
            System.out.println(stack);
            System.out.println("发射子弹了哈");
            System.out.println(stack.removeFirst());
            System.out.println(stack.removeFirst());
            System.out.println(stack.removeFirst());
            System.out.println(stack);

这里用到了LinkedList两个独有的方法,removeFirst()和addFirst(),其实这两个方法可以用pop(出栈)和push(进栈)来操作,修改后如下:

java 复制代码
 //应用场景2:设计栈【先进后出,后进先出】
        System.out.println("----------------应用场景2---------------");
            LinkedList<String> stack = new LinkedList<>();
            stack.push("1号子弹");
            stack.push("2号子弹");
            stack.push("3号子弹");
            stack.push("4号子弹");
            stack.push("5号子弹");
            stack.push("6号子弹");
            System.out.println(stack);
            System.out.println("发射子弹了哈");
            System.out.println(stack.pop());
            System.out.println(stack.pop());
            System.out.println(stack.pop());
            System.out.println(stack);

效果结果均一样,这是因为push的底层就是addFirst(),pop的底层就是removeFirst():

相关推荐
朦胧之9 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅14 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪15 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly15 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨15 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜15 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing1 天前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户298698530141 天前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波2 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8863 天前
记一次诡异的 Docker 容器"串包"故障排查
java