二、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
mysql:--查询慢sql:业务db用户 select b.time, b.host, b.id, b.state, b.user, b.db, b.info from information_s ...
- Qt编写自定义控件28-颜色滑块面板
一.前言 相比于上一个颜色按钮面板,此控件就要难很多,颜色值有三种表示形式,除了程序员最常用的RGB以外,还有HSB和CMY方式. RGB色彩模式是工业界的一种颜色标准,是通过对红(R).绿(G).蓝 ...
- JavaScript 模块化
当项目越来越大时,会遇到一些问题: 1.命名冲突 2.文件依赖 所有就有了javascript模块化开发概念. 模块化开发的演变: 1.函数块:最开始用全局函数将代码块包括在函数体内,然后把很多函数写 ...
- vim复制粘贴导致多行出现#号解决办法
在vim内复制多行假如复制的行带有#号会导致其他不带#号的行自动加# 解决办法,输入一下命令再粘贴即可 :set paste
- Python中bytes与字符串的相互转化
代码: # bytes转字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 ...
- 阅读随笔 Spring、Mybatis
一.<Spring+Mybatis 企业应用实战>(第2版本) 本书讲解了Spring.Mybatis及Spring+MyBatis 工作中的常用方法,没有太深入的原理性讲解,介绍 “如何 ...
- 搭建小规模邮件服务器(winmail-server)
Winmail mail server邮件系统的安装及使用. 在安装之前首先要配置服务器固定的IP地址.子网掩码和DNS服务器(网关我这里暂时用不着). 先来配置IP地址信息,使两台虚拟机能够互联互通 ...
- 在java web 工程中实现登录和安全验证
登录验证代码 package security; import java.io.IOException; import javax.servlet.ServletException; import j ...
- 简单深入Joomla!3.1.5模块_组件开发(一)
简单深入Joomla!3.1.5模块_组件开发 主要内容: 1, 模块(访问数据库,链接到组件,数据基本流向) 2, 组件CRUD(MVC模式,访问数据库,表单提交,AJAX提交,数据基本流向) 3, ...
- WebSocket的简单概念
本文为简单入门,主要介绍了什么是WebSocket以及其优点. 一.什么是WebSocket WebSocket的出现使得浏览器具备了实时双向通讯的能力.WebSocket是HTML5开始提供的一种浏 ...