二、LinkList及其源码解析
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及其源码解析的更多相关文章
- 深入理解Java AIO(二)—— AIO源码解析
深入理解Java AIO(二)—— AIO源码解析 这篇只是个占位符,占个位置,之后再详细写(这个之后可能是永远) 所以这里只简单说一下我看了个大概的实现原理,具体的等我之后更新(可能不会更新了) 当 ...
- 【vuejs深入二】vue源码解析之一,基础源码结构和htmlParse解析器
写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. vuejs是一个优秀的前端mvvm框架,它的易用性和渐进式的理念可以使每一个前端开发人员感到舒服,感到easy.它内 ...
- HttpClient学习(二)—— MinimalHttpClient源码解析
依赖关系 方法 class MinimalHttpClient extends CloseableHttpClient { //连接管理器 private final HttpClientConnec ...
- Java8线程池ThreadPoolExecutor底层原理及其源码解析
小侃一下 日常开发中, 或许不会直接new线程或线程池, 但这些线程相关的基础或思想是非常重要的, 参考林迪效应; 就算没有直接用到, 可能间接也用到了类似的思想或原理, 例如tomcat, jett ...
- Java集合框架之二:LinkedList源码解析
版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! LinkedList底层是通过双向循环链表来实现的,其结构如下图所示: 链表的组成元素我们称之为节点,节点由三部分组成:前一个节点的引用地 ...
- Tomcat系列(二)- EndPoint源码解析
在上一节中我们描述了Tomcat的整体架构, 我们知道了Tomcat分为两个大组件,一个连接器和一个容器. 而我们这次要讲的 EndPoint的组件就是属于连接器里面的. 它是一个通信的端点,就是负责 ...
- 一 ArrayList 及其源码解析
1.数组介绍 因为数组在存储数据时是按顺序存储的,存储的内存也是连续的,所以其特点是读取数据比较容易,插入删除比较困难 2.arraylist源码分析 1)构造方法(默认容量为10) 2)插入数据 扩 ...
- Rxlifecycle(二):源码解析
1.结构 Rxlifecycle代码很少,也很好理解,来看核心类. 接口ActivityLifecycleProvider RxFragmentActivity.RxAppCompatActivity ...
- 六、TreeMap的使用 及其源码解析
TreeMap中的元素默认按照keys的自然排序排列 1. 构造函数TreeMap(): 创建一个空的TreeMap ,keys按照自然排序TreeMap(Comparator comparator) ...
随机推荐
- SQL-W3School-高级:SQL IN 操作符
ylbtech-SQL-W3School-高级:SQL IN 操作符 1.返回顶部 1. IN 操作符 IN 操作符允许我们在 WHERE 子句中规定多个值. SQL IN 语法 SELECT col ...
- mongodb MongoDB C#/.NET driver version
The first column lists the driver version(s). C#/.NET Driver Version MongoDB 2.6 MongoDB 3.0 MongoDB ...
- 为TMenuItem增加指针Data属性
Delphi的有些组件中都包含.Data属性,比如TTreeNode,.Data属性可以认为是一个指针,可以指向任何类或者结构,方便后续操作. 但是TMenuItem没有.Data属性,下面介绍最简单 ...
- django ORM中的复选MultiSelectField的使用
下载和介绍: https://pypi.org/project/django-multiselectfield/ 在django ORM的使用中,经常会出现选择的情况,例如: class person ...
- admin源码分析
django settings 源码分析 导入settingso模块,进入源码,会发现settings是一个 单例 LazySettings类实例化产生的一个对象,LazySettings实例化后就会 ...
- 2019-10-17 李宗盛 spss作业
开放数据库连接是为解决异构数据库之间的数据共享而产生的,现已成为Wosa cwindows开放系统体系结构主要部分和基于Windows环境的一种数据库访问接口标准ODBS被异构数据库访问提供统一接口, ...
- javascript一些实用的方法
判断数据类型 function isType(type) { return function(obj) { return {}.toString.call(obj) == "[object ...
- IIS 6.0的web园 最大工作进程数细谈
这篇文章主要介绍了IIS 6.0的web园 最大工作进程数,需要的朋友可以参考下:(摘自:http://www.jb51.net/article/84817.htm) IIS 6.0允许将应用程序池配 ...
- GDB获取帮助信息
用help 功能,你可以获得GDB 的命令信息. helph 你可以用help(缩写h)不带参数来显示一个命令分类的简短列表. (gdb) help List of classes of comman ...
- String、StringBuilder、StringBuffer的爱恨情仇
第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符 ...