jdk1.7.0_79

上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》,本文将对LinkedList的常用方法做简要解析。

LinkedList是基于链表实现的,也就是说它具备了链表的优点和缺点,随机访问慢、插入删除速度快。既然是链表,那么它就存在节点数据结构,也不存在容量大小的问题,来一个在尾部添加一个。

//LinkedList$Nodeprivate static class Node {

E item;

Node next;

Node prev;

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

}

}

第一个默认不带参数的构造方法,构造一个空链表。

//1.LinkedList,默认构造方法public LinkedList() {

}

第二个构造方法能把一个集合作为一个参数传递,同时集合中的元素需要是LinkedList的子类。

//2.LinkedList,能将一个集合作为参数的构造方法public LinkedList(Collection extends E> c) {this();

addAll(c);

}

两个构造方法都比较简单,接下来看元素的插入及删除等方法。

public boolean add(E e) {

linkLast(e); //将元素添加到链表尾部return true;

}

//LinkedList#linkLastvoid linkLast(E e) {final Node l = last; //链表尾指针引用暂存final Node newNode = new Node<>(l, e, null); //构造新节点last = newNode; //将链表的尾指针指向新节点if (l == null) //此时为第一次插入元素first = newNode;elsel.next = newNode;

size++; //链表数据总数+1modCount++; //modCount变量在《有关ArrayList常用方法的源码解析》提到过,增删都会+1,防止一个线程在用迭代器遍历的时候,另一个线程在对其进行修改。}

学过《数据结构》的同学相信看到链表的操作不会感到陌生,接着来看看删除指定位置的元素remove(int)方法。

//LinkedList#removepublic E remove(int index) {

checkElementIndex(index); //检查是否越界 index >= 0 && index <= sizereturn unlink(node(index)); //调用node方法查找并返回指定索引位置的Node节点}

//LinkedList#node,根据索引位置返回Node节点Node node(int index) {if (index < (size >> 1)) { //size >> 1 = size / 2,如果索引位于链表前半部分,则移动fisrt头指针进行查找Node x = first;for (int i = 0; i < index; i++)

x = x.next;return x;

} else { //如果索引位于链表后半部分,则移动last尾指针进行查找Node x = last;for (int i = size - 1; i > index; i--)

x = x.prev;return x;

}

}

查找到index位置的Node后,调用unlink方法摘掉该节点。

//LinkedList#unlink,一看即懂E unlink(Node x) {// assert x != null;final E element = x.item;final Node next = x.next;final Node prev = x.prev;if (prev == null) {

first = next;

} else {

prev.next = next;

x.prev = null;

}if (next == null) {

last = prev;

} else {

next.prev = prev;

x.next = null;

}

x.item = null;

size--;

modCount++;return element;

}

从代码中就能看出LinkedList和ArrayList两者的优缺点,由于只涉及简单的链表数据结构,所以不再对其他方法进行解析。

java arraylist 常用方法_分享ArrayList中的几个常用方法的源码相关推荐

  1. 基于java框架的图书分享系统的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java框架的图书分享系统的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java框架的图书分享系统的设计与开发计算机毕业设计源码+系统+lw文档+mysql数据库 ...

  2. java脏字过滤_分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤...

    案例1. 利用Servlet的过滤器Filter进行完成脏话过滤 package cn.javabs.filter; import java.io.IOException; import javax. ...

  3. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  4. java中的==、equals()、hashCode()源码分析(转载)

    在java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际的编程总结一下. 1. ==  java中的==是比较两个对象在JVM中的地址.比较好理解.看下面的代码: ...

  5. java毕业设计——基于java+Applet+access的综合测评系统设计与实现(毕业论文+程序源码)——综合测评系统

    基于java+Applet+access的综合测评系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Applet+access的综合测评系统设计与实现,文章末尾附有本毕业设计的 ...

  6. Spring中AOP相关的API及源码解析,原来AOP是这样子的

    前言 之所以写这么一篇文章主要是因为下篇文章将结束Spring启动整个流程的分析,从解析配置到创建对象再到属性注入最后再将创建好的对象初始化成为一个真正意义上的Bean.因为下篇文章会涉及到AOP,所 ...

  7. Android研发中对String的思考(源码分析)

    1.常用创建方式思考: String text = "this is a test text "; 上面这一句话实际上是执行了三件事  1.声明变量 String text; 2. ...

  8. java毕业设计——基于java+Java awt+swing的愤怒的小鸟游戏设计与实现(毕业论文+程序源码)——愤怒的小鸟游戏

    基于java+Java awt+swing的愤怒的小鸟游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Java awt+swing的愤怒的小鸟游戏设计与实现,文章末尾附有本毕 ...

  9. 【java毕业设计】基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码)——超级玛丽游戏

    基于java+GUL的超级玛丽游戏GUL设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+GUL的超级玛丽游戏GUL设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章 ...

最新文章

  1. SQLServer2008/2005 生成数据字典语句
  2. 分析各种排序算法的优劣
  3. 初探Spring MVC 请求处理流程
  4. [新手学go]关于go语言中的变量重复声明
  5. 如果今天设计了Java:同步接口
  6. quartz.net隔一天执行一次_你知多少年的轮回,中秋和国庆在同一天吗?喜相逢必备“蟹”逅礼...
  7. 如何查看oracle压力,oracle压力测试之orabm
  8. PlaceHolder和Panel的区别【搜藏】
  9. mysql 安装在路由器_MySQL如何安装?安装MySQL数据库的三种方法
  10. 安装nodejs出现Invalid drive: f:\的解决办法
  11. Ubuntu系统lamp环境下安装wordpress、zencert和mangento程序网站
  12. python绘制emoji_在Python中将emoji转换为文本
  13. 苹果Mac电脑文件夹路径怎么看?“访达”也能显示文件路径
  14. N32G457VEL7移植FreeRTOS代码
  15. CSDN产品公告第3期:博客数据统计功能上线,OFFER大挑战等你来!
  16. 关于华为昆仑关键业务服务器
  17. vue实现鼠标移入移出事件
  18. 5G学习总结:RRM(无线资源管理)
  19. ckeditor php 上传图片_ckeditor 4上传图片功能配置方法
  20. 实现Python爬虫的思路、原理

热门文章

  1. jdk8 cms g1gc_G1 vs CMS vs平行GC
  2. 无服务器-构建现代应用程序的新方法
  3. 在JDK 9中将InputStream传输到OutputStream
  4. 通过投影增强数据模型
  5. cobertura覆盖率_Cobertura和Maven:集成和单元测试的代码覆盖率
  6. TIBCO BusinessWorks 6和Container Edition与BW5的比较
  7. 将PostgreSQL PL / Java安装为PostgreSQL扩展
  8. 在NetBeans,Eclipse,IntelliJ,OpenShift和Maven上使用WildFly 9
  9. 为什么坚持使用JavaScript
  10. 函数接口– Java 8中java.util.function包中的函数接口