手撕Java集合之简易版Deque(LinkedList)
在目前,许多互联网公司的面试已经要求能手撕集合源码,集合源码本身算是源码里比较简单的一部分,但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的,很容易出现各种小问题。所以在平时就要注重这方面的联系。
以下是我自己写的一个简易双端队列,我没有实现List接口,因为里面要实现的函数方法太多了,所以只是挑了几个核心的代码来写,本质其实就是头插法和尾插法的结合。
代码主要有三个文件,分别是Node节点,Deque类和测试文件。
Node:
package org.example.collection;import lombok.Data;import java.util.HashMap;
import java.util.Map;@Data
public class Node<T> {T var;Node<T> prev;Node<T> next;Node(Node<T> prev,T element, Node<T> next){this.var = element;this.next = next;this.prev = prev;}}
Deque实现文件:
package org.example.collection;public class DequeCode<E>{int size = 0;Node<E> first;Node<E> last;public DequeCode() {this.first = new Node<E>(null,null,null);this.last = new Node<E>(null,null,null);//first和last之间应该建立联系first.next = last;last.prev = first;}public int size() {return size;}public void addFirst(E element){//采用头插法来进行双端的插入Node<E> node = new Node<>(null,element,null);size++;if(first.next==null){first.next = node;node.prev = first;return ;}Node<E> temp = first.next;first.next = node;node.prev = first;node.next = temp;temp.prev = node;}public void addLast(E element){//和头插入相同的思路Node<E> node = new Node<>(null,element,null);Node<E> temp = last.prev;size++;if(last.prev==null){last.prev = node;node.next = last;return ;}last.prev = node;node.next = last;temp.next = node;node.prev = temp;}public void removeFirst() throws Exception {if(size == 0) throw new Exception("出现问题");Node<E> node = first.next;first.next = first.next.next;node.next.prev = first;}public void removeLast() throws Exception {if(size == 0) throw new Exception("出现问题");Node<E> node = last.prev;last.prev = last.prev.prev;node.prev.next = last;}public Node<E> peekFirst(){return first.next;}public Node<E> peekLast(){return last.prev;}
}
最后是测试文件:
package org.example.collection;public class TestDeque {public static void main(String[] args) throws Exception {DequeCode<Integer> deque = new DequeCode<>();deque.addFirst(1);deque.addLast(2);System.out.println(deque.peekFirst().var);System.out.println(deque.peekLast().var);deque.addFirst(3);deque.addLast(4);System.out.println(deque.peekFirst().var);System.out.println(deque.peekLast().var);deque.removeFirst();deque.removeLast();System.out.println(deque.peekFirst().var);System.out.println(deque.peekLast().var);}
}
结果和预期一致

代码逻辑很简单,但是细节方面仍有很大的提升空间。但是面试时间短,这些代码能在10来分钟无失误写出,想来也是够用了。
相关文章:
手撕Java集合之简易版Deque(LinkedList)
在目前,许多互联网公司的面试已经要求能手撕集合源码,集合源码本身算是源码里比较简单的一部分,但是要在面试极短的10来分钟内快速写出一个简易版的源码还是比较麻烦的,很容易出现各种小问题。所以在平时就要注重这方面的联系。 以…...
MySQL知识点归纳总结(二)
10、MVCC实现原理? 事务ID(Transaction ID):每个事务在执行时都会被分配一个唯一的事务ID,用于标识该事务的开始时间顺序。事务ID是一个递增的整数,随着每个新事务的开始而递增。 Undo日志(Un…...
vue:实现顶部消息横向滚动通知
前言 系统顶部展示一个横向滚动的消息通知,就是消息内容从右往左一直滚动。 效果如下: 代码 使用 <template><div class"notic-bar"><img :src"notic" class"notice-img" /><div class"noti…...
[笔记] wsl 禁用配置 win系统环境变量+代理
wsl 配置禁用 win系统环境变量 进入 wsl 的 /etc/wsl.conf 目录,增加以下配置: [interop] enabledfalse appendWindowsPathfalse然后退出wsl,并且执行关闭正在运行的 wsl,执行命令 wsl --shutdown 最后重新进入wsl 即可。 参考…...
Mysql标量子查询
目录 子查询标量子查询数据准备 子查询 SQL语句中嵌套select语句,称为嵌套查询,又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... );子查询外部的语句可以是insert / update / delete / select 的任何一个&…...
深入了解Java虚拟机(JVM)
Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释执行Java字节码,并在各种平台上执行。JVM的设计使得Java具有跨平台性,开发人员只需编写一次代码,就可以在任何支持Java的系统上运行。我们刚开始学习Ja…...
Image Fusion via Vision-Language Model【文献阅读】
阅读目录 文献阅读AbstractIntroduction3. Method3.1. Problem Overview3.2. Fusion via Vision-Language Model 4. Vision-Language Fusion Datasets5. Experiment5.1Infrared and Visible Image Fusion 6. Conclusion个人总结 文献阅读 原文下载:https://arxiv.or…...
探索Manticore Search:开源全文搜索引擎的强大功能
在当今信息爆炸的时代,数据的快速检索变得至关重要。无论是在电子商务网站、新闻门户还是企业内部文档,高效的搜索引擎都是确保用户满意度和工作效率的关键因素之一。而在搜索引擎领域,Manticore Search 作为一款开源的全文搜索引擎ÿ…...
AI 笔记助手,你的思路整理助手
大家好,今天给大家介绍一款非常实用的 AI 笔记助手——AI Note。这款助手就像是一个贴心的小助手,能帮助我们整理笔记,提高学习和工作效率。 🤖 AI Note 可以智能总结笔记内容,准确标记重点,让我们更快地获…...
EchoServer回显服务器简单测试
目录 工具介绍 工具使用 测试结果 工具介绍 github的一个开源项目,是一个测压工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的…...
车灯修复UV胶的优缺点有哪些?
车灯修复UV胶的优点如下: 优点: 快速固化:通过紫外光照射,UV胶可以在5-15秒内迅速固化,提高了修复效率。高度透明:固化后透光率高,几乎与原始车灯材料无法区分,修复后车灯外观更加…...
探讨倒排索引Elasticsearch面试与实战:从理论到实践
在当前大数据时代,Elasticsearch(以下简称为ES)作为一种强大的搜索和分析引擎,受到了越来越多企业的青睐。因此,对于工程师来说,掌握ES的面试准备和实战经验成为了必备技能之一。本文将从ES的面试准备和实际…...
网安入门18-XSS(靶场实战)
HTML实体化编码 为了避免 XSS 攻击,会将<>编码为<与>,这些就是 HTML 实体编码。 编码前编码后不可分的空格 < (小于符号)< > (大于符号)> & (与符号)&″ (双引号)"’ (单引号)'© (版权符…...
爬虫的一些小技巧总结
一、在爬虫中,爬取的数据类型如下 1.document:返回的是一个HTML文档 2.png:无损的图片,jpg:压缩后的图片,wbep:有损压缩,比png差,比jpg好 3.avgxml图像编码字符串 4.script:脚本文件,依据一定格式编写的可执行的文…...
LeetCode---386周赛
题目列表 3046. 分割数组 3047. 求交集区域内的最大正方形面积 3048. 标记所有下标的最早秒数 I 3049. 标记所有下标的最早秒数 II 一、分割数组 这题简单的思维题,要想将数组分为两个数组,且分出的两个数组中数字不会重复,很显然一个数…...
React之数据绑定以及表单处理
一、表单元素 像<input>、<textarea>、<option>这样的表单元素不同于其他元素,因为他们可以通过用户交互发生变化。这些元素提供的界面使响应用户交互的表单数据处理更加容易 交互属性,用户对一下元素交互时通过onChange回调函数来监听…...
Siamrpn++论文中文翻译(详细!)
SiamRPN: Evolution of Siamese Visual Tracking with Very Deep Networks SiamRPN:具有非常深度网络的Siamese视觉跟踪的进化 【siamrpn论文地址】 https://arxiv.org/abs/1812.11703 摘要 基于Siamese网络的跟踪器将跟踪表示为目标模板和搜索区域之间的卷积特征…...
第一篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas库
传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、主要特点和功能介绍二、Series 示例代码三、DataFrame示例代码四、数据导入/导出示例代码五、数据清洗示例代码六、数据选择和过滤示例代码七、数据合并和连接示例代码八、数据分组和聚…...
基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的停车位检测系统(Python+PySide6界面+训练代码)
摘要:开发停车位检测系统对于优化停车资源管理和提升用户体验至关重要。本篇博客详细介绍了如何利用深度学习构建一个停车位检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并结合了YOLOv7、YOLOv6、YOLOv5的性能对比…...
状态模式(State Pattern)
定义 状态模式(State Pattern)是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。这意味着,当对象的状态发生变化时,它的行为也会发生变化。状态模式特别适用于行为依赖于其状态的对象,而且当这…...
STM32F103C8T6驱动DHT11温湿度传感器,从CubeMX配置到OLED显示(附完整工程)
STM32F103C8T6驱动DHT11温湿度传感器全流程实战指南 最近在帮几个学生调试毕业设计时,发现很多初学者在使用STM32驱动DHT11传感器时总会遇到各种奇怪的问题。要么时序不对导致数据读取失败,要么OLED显示乱码,最头疼的是CubeMX配置一堆参数后代…...
手把手教你离线部署Stable Diffusion XL:Python Diffusers库魔改实战(附完整代码)
手把手教你离线部署Stable Diffusion XL:Python Diffusers库魔改实战(附完整代码) 在金融、医疗等对数据安全要求极高的行业,或是某些科研机构的隔离网络中,AI模型的离线部署能力直接决定了技术落地的可能性。今天我们…...
Vue3 响应式系统是如何实现依赖收集的?通俗易懂的 Proxy 机制解析
Vue3响应式核心用Proxy替代Object.defineProperty,通过get/set拦截实现按需依赖收集与触发;读取时track记录effect,修改时trigger通知更新。Vue3 的响应式核心靠 Proxy 实现依赖收集,它不像 Vue2 那样遍历所有属性去 defineProper…...
AI软件研发成本飙升的真相:3个被忽视的隐性成本源,今天不查明天多烧47%预算!
第一章:AI原生软件研发成本优化实战技巧 2026奇点智能技术大会(https://ml-summit.org) AI原生软件的研发成本常被模型训练开销主导,但实际可观测的浪费更多来自推理服务冗余、提示工程低效、以及缺乏细粒度资源编排。聚焦可落地的降本路径,…...
CSS 渐变:创造绚丽的色彩效果
CSS 渐变:创造绚丽的色彩效果 掌握 CSS 渐变的高级技巧,创造绚丽而独特的色彩效果。 一、渐变概述 作为一名把代码当散文写的 UI 匠人,我对 CSS 渐变有着独特的见解。渐变是 CSS 的强大特性,它可以让我们创建从一种颜色到另一种颜…...
JavaScript中Object-is实现值相等性判断的算法
Object.is 是比 更精确的严格相等判断方法,能正确处理 NaN NaN 为 false 和 0 -0 为 true 的边界情况;其核心逻辑是:同为 NaN 返回 true,0 与 -0 返回 false,其余等价于 。Object.is 是 JavaScript 中用于判断两个值…...
Americhem于Chinaplas 2026宣布在华新增投资,进一步拓展其全球医疗健康业务版图
全球领先的高分子材料解决方案提供商Americhem今日宣布,通过在中国苏州新建一座洁净复合材料生产设施,进一步强化其在医疗健康领域的能力;同时,公司还将在Chinaplas 2026展会上推出多项先进材料技术。该设施预计将于2026年下半年投…...
__block 变量内存布局详解恫
故障表现 发现请求集群 demo 入口时卡住,并且对应 Pod 没有新的日志输出 rootce-demo-1:~# kubectl get pods -n deepflow-otel-spring-demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NO…...
完整Modbus协议栈:pymodbus核心组件详解
完整Modbus协议栈:pymodbus核心组件详解 【免费下载链接】pymodbus A full modbus protocol written in python 项目地址: https://gitcode.com/gh_mirrors/py/pymodbus PyModbus是一个用Python编写的完整Modbus协议实现,提供了客户端、服务器和模…...
SAP ABAP长文本读取性能瓶颈诊断与批量优化实战:从READ_TEXT到READ_TEXT_TABLE
1. 当SAP报表遇上长文本:性能噩梦的开始 相信每个ABAP开发者都遇到过这样的场景:一个原本运行良好的物料报表,突然因为增加了长文本显示需求而变得奇慢无比。我去年就接手过这样一个项目,用户抱怨说点击报表后可以去泡杯咖啡&…...
