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. SQL-W3School-高级:SQL DEFAULT 约束

    ylbtech-SQL-W3School-高级:SQL DEFAULT 约束 1.返回顶部 1. SQL DEFAULT 约束 DEFAULT 约束用于向列中插入默认值. 如果没有规定其他的值,那么会 ...

  2. JVM的线程

    我们使用java命令来运行一个程序,那么就需要启动JVM , 而jvm的启动就相当于启动了一个进程 , 而这个进程在启动的时候会自动启动一个线程,由这个线程去调用main方法,而这个线程就是主线程 ; ...

  3. centos 开启关闭网卡

    ifdown ifcfg-enp7s0 关闭网卡 ifup ifcfg-enp7s0 开启网卡

  4. C++ STL Heap算法

    #include <iostream>#include <algorithm>#include <vector> using namespace std; int ...

  5. python3 枚举enum定义和使用

    两种方式定义枚举类: 1.直接使用Enum列出多个枚举值来创建枚举类. 2.通过集成Enum基类派生枚举类. 程序示范: 1.直接使用Enum列出多个枚举值来创建枚举类. from enum impo ...

  6. wangEditor编辑器控件里textarea的id不要用content

    头引用 <script type="text/javascript" src="js/jquery-1.10.2.min.js"></scri ...

  7. CSS 自适应技巧

    DIV的内容垂直居中 不再MARGINT-TOP多少 来居中显示 display:table-cell; #block-1{ width:100%; height:80px; display:tabl ...

  8. CockroachDB学习笔记——[译]为什么Go语言是CockroachDB的正确选择

    原文链接:https://www.cockroachlabs.com/blog/why-go-was-the-right-choice-for-cockroachdb/ 原作者:Jessica Edw ...

  9. 解决Python-OpenCV中cv2.rectangle报错

    在PyTorch中测试DataLoader读取后的图像,对图像画框cv2.rectangle时报错: TypeError: Layout of the output array img is inco ...

  10. Golang开源项目

    谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也 ...