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():

相关推荐
今天和Aboo结婚了吗2 小时前
【Broker一重启消息没了:一次RabbitMQ非持久化+没开Confirm的血亏事故】
java·rabbitmq·messagequeue·bug排查
daidaidaiyu7 小时前
一文学习 工作流开发 BPMN、 Flowable
java
SuniaWang8 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题六:《Vue3 前端开发实战:打造企业级 RAG 问答界面》
java·前端·人工智能·spring boot·后端·spring·架构
sheji34169 小时前
【开题答辩全过程】以 基于springboot的扶贫系统为例,包含答辩的问题和答案
java·spring boot·后端
m0_726965989 小时前
面面面,面面(1)
java·开发语言
xuhaoyu_cpp_java10 小时前
过滤器与监听器学习
java·经验分享·笔记·学习
程序员小假10 小时前
我们来说一下 b+ 树与 b 树的区别
java·后端
Meepo_haha11 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
sheji341611 小时前
【开题答辩全过程】以 基于springboot的房屋租赁系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端