1.链表介绍

链表是一种物理单元上非连续,非顺序的存储结构。链表由一系列的姐点组成,结点可以在运行时
动态生成。每个结点包含两个部分,一个是存储数据元素的数据域,一个是存储下一个结点的指针域

双链表是链表的一种,每个结点既有前驱指针,也有后驱指针

2.LinkList 源码分析
1)构造方法
public LinkList(){
}

public LinkedList(Collection <? extend E> c){
this();
addAll(c)
}

2) 元素插入
第一种插入方式
public boolean add(E e) {
linkLast(e);
return true;
}

//在链表的最后一个位置插入结点
void linkLast(E e) {
//
final Node<E> l = last;
//构造一个新结点,(l(前驱结点), e(新建结点的元素), null(后继结点));
final Node<E> newNode = new Node<>(l, e, null);
设置新节点是尾结点
last = newNode;
判断链表是否有结点
if (l == null)

first = newNode;
else
//设置尾结点的后继结点是新建的节点
l.next = newNode;
size++;
modCount++;
}

// 链表结点的定义类
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;

Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}

第二种插入方式
public boolean add(E e。int index) {
}

3)元素删除
public E remove(){
}

public E remove(int index){
}

4) 查找方法
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}

5)链表的遍历
LinkedList的迭代器
Iterator<String> iterator = list.iterator();

=================================================
3 主要方法
1)添加元素到LinkedList
LinkedList提供了多个添加元素的方法:
●boolean add(E e)
在链表尾部添加一个元素,如果成功,返回true,否则返回false。

●void addFirst(E e)
在链表头部插入一个元素。

●addLast(E e)
在链表尾部添加一个元素。

●void add(int index, E element)
在指定位置插入一个元素。

2)从LinkedList中删除元素
LinkedList提供了多个删除元素的方法:

● E remove(int index)
从当前链表中移除指定位置的元素。

● E removeFirst()
从当前链表中移除第一个元素

● E removeLast()
从当前链表中移除最后一个元素。

● E remove()
从当前链表中移除第一个元素,同removeLast()相同。

3)从LinkedList中获取元素
LinkedList提供了多个获取元素的方法:

● E get(int index)
从当前链表中获取指定位置的元素。

● E getFirst()
从当前链表中获取第一个元素。

● E getLast()
从当前链表中获取最后一个元素。

4)LinkedList的遍历方法
Iterator it =list.lterator();
while(it.hasNext()){
E e=it.next();
it=it.next();
}

foreach语句效率最高,其次是迭代器,效率最差的是for循环

总结:inkedList存储元素的数据结构是双向链表结构,由存储元素的结点连接而成,
每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。

二、LinkList及其源码解析的更多相关文章

  1. 深入理解Java AIO(二)—— AIO源码解析

    深入理解Java AIO(二)—— AIO源码解析 这篇只是个占位符,占个位置,之后再详细写(这个之后可能是永远) 所以这里只简单说一下我看了个大概的实现原理,具体的等我之后更新(可能不会更新了) 当 ...

  2. 【vuejs深入二】vue源码解析之一,基础源码结构和htmlParse解析器

    写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. vuejs是一个优秀的前端mvvm框架,它的易用性和渐进式的理念可以使每一个前端开发人员感到舒服,感到easy.它内 ...

  3. HttpClient学习(二)—— MinimalHttpClient源码解析

    依赖关系 方法 class MinimalHttpClient extends CloseableHttpClient { //连接管理器 private final HttpClientConnec ...

  4. Java8线程池ThreadPoolExecutor底层原理及其源码解析

    小侃一下 日常开发中, 或许不会直接new线程或线程池, 但这些线程相关的基础或思想是非常重要的, 参考林迪效应; 就算没有直接用到, 可能间接也用到了类似的思想或原理, 例如tomcat, jett ...

  5. Java集合框架之二:LinkedList源码解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! LinkedList底层是通过双向循环链表来实现的,其结构如下图所示: 链表的组成元素我们称之为节点,节点由三部分组成:前一个节点的引用地 ...

  6. Tomcat系列(二)- EndPoint源码解析

    在上一节中我们描述了Tomcat的整体架构, 我们知道了Tomcat分为两个大组件,一个连接器和一个容器. 而我们这次要讲的 EndPoint的组件就是属于连接器里面的. 它是一个通信的端点,就是负责 ...

  7. 一 ArrayList 及其源码解析

    1.数组介绍 因为数组在存储数据时是按顺序存储的,存储的内存也是连续的,所以其特点是读取数据比较容易,插入删除比较困难 2.arraylist源码分析 1)构造方法(默认容量为10) 2)插入数据 扩 ...

  8. Rxlifecycle(二):源码解析

    1.结构 Rxlifecycle代码很少,也很好理解,来看核心类. 接口ActivityLifecycleProvider RxFragmentActivity.RxAppCompatActivity ...

  9. 六、TreeMap的使用 及其源码解析

    TreeMap中的元素默认按照keys的自然排序排列 1. 构造函数TreeMap(): 创建一个空的TreeMap ,keys按照自然排序TreeMap(Comparator comparator) ...

随机推荐

  1. apt如何列出所有已经安装的软件包

    apt如何列出所有已经安装的软件包 转 https://www.helplib.com/ubuntu/article_155294 问题: 我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看 ...

  2. 分布式存储——Build up a High Availability Distributed Key-Value Store

    原文链接 Preface There are many awesome and powerful distributed NoSQL in the world, like Couchbase, Mon ...

  3. C# Winform中WebBrowser给网页中的input控件赋值/设置值

    订阅WebBrowser的DocumentCompleted事件,在里面写入 private void browser_DocumentCompleted(object sender, WebBrow ...

  4. 灵活配置tomcat根目录网站

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDepl ...

  5. iOS-XMPP(转)

    IM的实现原理    在我最初学习编程的时候,曾经用JAVA实现了一个最简单版的IM通讯,即通过Socket建立两台电脑之间的连接,然后发送IO流来进行即时通讯,我们现在所使用的IM软件尽管看上去非常 ...

  6. 2019-10-17 李宗盛 spss作业

    开放数据库连接是为解决异构数据库之间的数据共享而产生的,现已成为Wosa cwindows开放系统体系结构主要部分和基于Windows环境的一种数据库访问接口标准ODBS被异构数据库访问提供统一接口, ...

  7. 阿里云Centos 7.6安装Redis以及开启远程连接

    下载地址:http://redis.io/download,下载最新稳定版本. 本教程使用的最新文档版本为 5.0.5,下载并安装: $ wget http://download.redis.io/r ...

  8. jupyter lab 安装

    在windows下安装jupyter 特别简单 首先你需要有Anaconda or python的环境变量,这里我就不说怎么安装环境变量了,网上一大堆教程 启动黑窗口,下载jupyter pip in ...

  9. 第11章:使用Python打造MySQL专家系统

    1.Python语言高级特性 1).深入浅出Python生成器 1).生成器函数:与普通函数定义类似,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间挂 ...

  10. 通过ImageReader进行图像裁剪时出现NoSuchElementException异常

    首先放上最初的Image工具类 package util; import java.awt.Rectangle; import java.awt.image.BufferedImage; import ...