LinkedList解析
1.LinkedList是个双向循环链表。见下图:
2.下面自己照jdk写个简单例子:
//首先是链表的结点的数据结构结构
static class Entry<E> {E element; // 存放的元素Entry<E> next; // 指向下一个 Entry节点 Entry<E> previous; // 指向上一个Entry节点Entry(E element, Entry<E> next, Entry<E> previous) {this.element = element;this.next = next;this.previous = previous;}}
//下面是链表的实现
public class MyLinkedList<E> {// 头结点,一个标识,靠它来进入链表private transient Entry<E> header = new Entry<E>(null, null, null);private transient int size = 0;public MyLinkedList() {// 构造,下一个和前一个都指向自身,见上图的空链表header.next = header.previous = header;}// 添加到头部,可以添加空值public void addFirst(E e) { addBefore(e, header.next);}private Entry<E> addBefore(E e, Entry<E> entry) {/** 1.空链表情况:newEntry的next指向header,newEntry的previous指向header。[header空时: next和previous都指向header]* 2.非空链表情况:newEntry的next指向header的next,newEntry的previous指向header.next.previous 就是header本身*/Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);/** 1.空链表情况:newEntry.previous就是header 它的next指向newEntry* 2.非空链表情况:newEntry.previous就是header 让header.next指向newEntry*/newEntry.previous.next = newEntry;/** 1.空链表情况:newEntry.next上面已经指向了header 所以就是让header的previous也指向newEntry* 2.非空链表情况:newEntry.next 是header的previous ,* 所以就是让header的前一个结点的previous指向newEntry*/newEntry.next.previous = newEntry;size++;// 如看不懂,见对着上面的图就能分析清楚return newEntry;}public void addLast(E e) { // 自己根据addFirst可以分析出来addBefore(e, header);}public boolean remove(Object o) {for (Entry<E> e = header.next; e != header; e = e.next) {//遍历链表if (o.equals(e.element)) { //找到了这个结点remove(e);//该表指针关系return true;}}return false;}private E remove(Entry<E> e) {E result = e.element;//这个结点的上一个结点的下一个指向这个结点的下一个,就是把它的上一级的关系给踢出了e.previous.next = e.next;//这个结点的 下一个结点 的 上一个 指向 这个结点的前一个结点, 就是踢出了 下一级的关系e.next.previous = e.previous;e.next = e.previous = null;//清除e.element = null; // 清除size--;return result;}}
好了基本就是这样,其实就是数据结构中的双向循环链表,大学学过数据结构的都应该明白。
老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400
LinkedList解析相关推荐
- 某团技术拷问:ArrayList 和 LinkedList 哪个更占空间?
HR力荐了一个工作 4 年,目前年薪 40W+ 的候选人. 看他简历,从 JVM.MySQL.Redis,再到悲观锁.乐观锁一个都不缺,并发编程.分布式也都接触过,像是个实力派! 着急用人,就赶紧叫人 ...
- c++ list遍历_List集合就这么简单「源码剖析」
前言 声明,本文用得是jdk1.8 前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识. 现在这篇主要讲List集合的三个子类: ArrayList 底层数据结构是 ...
- Android课程设计:基于离线地图服务器的Android地图应用
Android开发课程设计:基于离线地图服务器的Android地图应用 此项目的灵感来源于伯克利cs61b的Project3: cs61b的官网地址:Project 3: Bear Maps 我的实验 ...
- 设计模式之 Interpreter(解释器) 通俗理解
23种设计模式 1 Interpreter定义: 定义语言的文法 ,并且建立一个解释器来解释该语言中的句子.通俗来讲就是定义一套规则,然后有个工具类,根据你传入的参数就知道你表达的意思. Interp ...
- 小圣求职记A:腾讯篇
本人普通985高校计算机专业研究生一枚,从9月12号开始正式找工作,一个月过去了,参加了能参加的各个互联网公司的宣讲.笔试.面试,现用两篇随笔分享所见所闻.随笔A将以腾讯为例详细展示整个过程,随笔B将 ...
- Java选择题练习 ---(NKW)
Java选择题 第一周期: 注:题目均来自于牛客网 1.Java 语言中,负责并发管理的机制是(多线程). 解析:多线程是Java程序的并发机制,它能同步共享数.处理不同的事件. 2.区分类中重载方法 ...
- Java 爬虫:是时候 Get 新技能了,使用 Java 爬取网页信息
如果你想利用自己的技术做出一点有意思的产品来,那么爬虫.算法和 AI 等技术可能是一个不错的突破口.今天,我们就来介绍下使用 Java 爬取页面信息的几种思路. 说起爬虫,自从 Python 兴起之后 ...
- 是时候 Get 新技能了:使用 Java 爬取网页信息
如果你想利用自己的技术做出一点有意思的产品来,那么爬虫.算法和 AI 等技术可能是一个不错的突破口.今天,我们就来介绍下使用 Java 爬取页面信息的几种思路. 说起爬虫,自从 Python 兴起之后 ...
- 阿里的easyexcal包实现表格动态导出
阿里的easyexcal包实现表格动态导出 1.介绍 在日常开发中,我们或多或少会遇到导入excal,导出excal等业务需求,那么了解这一技能就很有必要了. 市场中针对这个,我知道的有两个包,一个是 ...
最新文章
- Revit API创建几何实体Solid并找到与之相交的元素
- 【整理】【转载】高薪是怎么跳出来的?
- AIX系统文件安全性方面的几点考虑
- android view强制重绘_android view 相关方法 layout draw 布局 重绘 | 学步园
- Python基础教程:列表(list)切片详细操作
- 二阶差分预测后数据还原公式_携程如何基于ARIMA时序分析做业务量的预测
- twisted系列教程十八–异步操作的并行运行
- Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。
- arp 不同网段 相同vlan_同vlan不同网段能否ping通?
- 携程运维自动化平台,上万服务器变更也可以很轻松
- ConnectionString 最简便写法 for MSSQL 2005 EXPRESS
- MySQL入门02-MySQL二进制版本快速部署
- 浅谈系统如何对接社交登录之微博登录功能
- 如何使用Java进行网络爬虫
- revit二次开发 创建标注标记
- react 微信公众平台实现支付功能
- 什么是WebP图片格式?如何在线把Webp格式转换为JPEG格式?
- [转]十分简明易懂的FFT(快速傅里叶变换)
- 燕山大学教务系统官网计算机学院,2021年燕山大学教务系统入口:https://jwc.ysu.edu.cn...
- 无法访问网上邻居终极解决办法!
热门文章
- maven实战和学习(带视频教程)
- pythonrandint用法_Python:randint()用法
- Java实现文件写入——IO流(输入输出流详解)
- 帮助企业制作帮助文档的6大“黑科技”工具!
- Java标识符及关键字
- 根目录index.php-wp-blog-header.php-wp-load.php-wp-config.php
- 多媒体web播放器,移动端h5 video播放器
- 明道云对接企查查,一键矫正客户信息
- 工业4.0时代是挑战也是机遇
- 值得记住的爱情箴言(2)——阿牛我收藏的