ArrayList是动态数组,其实本质就是对数组的操作。
那么LinkedList实现原理和ArrayList是完全不一样的。
现在就来分析一下ArrayList和LinkeList的优劣吧
LinkedList是一个双向链表,每个元素都是一个Node对象,
这个node对象里面有三个成员:
E item;指向实际的元素
Node<E> next;指向下一个节点
Node<E> prev;指向前一个结点

利用idea编辑器查看LinkedList的结构,发现只有三个成员变量。

而所有的public方法操作的都是这个三个变量。
下面逐个分析方法。

主要就是调用了linkLast方法。

步骤如下:
第一步:l指向尾节点,
第二步:创建新的节点newNode;因为是在链表的最后添加元素,所以新节点的next元素为null.
第三步:尾节点指向新的节点
第四步:如果l(之前的尾节点)为空,新节点当作第一个节点
第五步:如果l(之前的尾节点)不为空,则之前的尾节点的next变量指向新节点。
链表大小size++;
修改的次数modCount++;

List<String> list=new LinkedList<>();
list.add("a");
list.add("b");

与ArrayList不同,LinkedList内存是按需分配的,不需要提前分配内存空间,因为操作的不是数组。

get方法

checkElementIndex(index);主要用于检查参数是否符合规范,没什么好说的。

主要看node(index)方法。

index<(size>>1)表示index小于size/2;
如果index索引位于前半部分,从头开始根据next向后遍历;
一直找到index-1索引处
如果在后半部分从last处开始根据prev向前遍历。一直循环到index处。
ArrayList中数组是连续存放的,可以根据索引直接定位元素,而LinkedList中,必须从头或尾顺着链接查找,所以论查询效率LinkedList没有ArrayList效率高;但是在链表前或尾添加和删除的效率倒是比ArrayList要高。

LinkedList还提供了remove,add(int index,E element),indexOf(Object o)等等这些方法,基本上都是差不多的原理操作的。

最新文章

  1. 使用ehcache持久化数据到磁盘 并且在应用服务器重启后不丢失数据
  2. js按钮浮动随手指方向移动而移动
  3. spring logback 配置
  4. python 文件包含
  5. Recyclerview使用系列教材
  6. css两个form不换行,两个div并排代码
  7. [wordpress]wp-api-jwt-auth 尝试添加运行在多站点中 need change
  8. (五)学习CSS之line-height属性
  9. cs代码实现控件移动TranslateTransform
  10. truncate 、delete与drop三者的异同
  11. ASP.NET Core MVC/WebAPi如何构建路由?
  12. 1-SDK开发初探-8266
  13. Next Greater Element I
  14. Github Page搜索工具更新 - 探索功能
  15. McQueenRPC源码阅读
  16. A NEW HYPERSPECTRAL BAND SELECTION APPROACH BASED ON CONVOLUTIONAL NEURAL NETWORK文章笔记
  17. ElasticSearch 2 (2) - Setup
  18. Warning: The Copy Bundle Resources build phase contains this target&#39;s Info.plist file &#39;Info
  19. Oracle体系结构之Oracle基本数据字典:v$database、v$instance、v$version、dba_objects
  20. Code First use dotConnect for MySQL

热门文章

  1. 创建目录命令 - mkdir
  2. Radar Installation(利用数据有序化进行贪心选择)
  3. html div四边阴影效果
  4. 松软科技课堂:jQuery 语法
  5. 第三十篇 玩转数据结构——字典树(Trie)
  6. 简单了解一个WSDL,SOAP的格式
  7. python修改文件后缀名
  8. Go网络编程TCP
  9. 每天进步一点点------Allegro 铺铜、内电层分割
  10. MySQL导入含有中文字段(内容)CSV文件乱码解决方法