写完第一篇笔记后又翻了好多博客,觉得这篇对LinkedList的理解有帮助,链接如下:

http://niub.iteye.com/blog/1786608

直接上博主结论:
ArrayList是数组的实现形式(内部存储结构是一个数组):
添加新的元素到数组末尾时,如果超过了当前容量,就要对数组进行扩容,扩充为原来大小的1.5倍,由于扩容牵涉到整个数组的copy,对性能影响较大,所以如果知道要存放容量的大小,尽量在创建ArrayList时指定

ArrayList就是一个数组实现,适用于, 查找操作较多,而修改操作(add和delete)较少的情况,由于实现较为简单。

LinkedList适用于:查找较少,修改较多的情况(这与LinkedList的链式结构是有关系的)。
LinkedList是链表结构的实现形式(内部存储结构是一个链表形式)。
另外,由于LinkedList实现了双向队列Deque接口,所以也具有队列的相关操作,可以当做一个队列使用。

本篇博客着重分析了linkedList的增删改差的一些源码,可以让你对linkedList有更深刻的认知(如果平时使用不多的话),源码就不重复展示了。

关于RandomAccess

在小记【1】里提到了这个接口,我也找了相关博客:

http://blog.csdn.net/keda8997110/article/details/8635005

简单说RandomAccess接口是影响你遍历算法的,没有实现RandomAccess的,和实现了RandomAccess的集合,走增强for循环遍历时的算法是不一样的。
官方是推荐我们去让集合实现这个接口,但linkedList并没有实现它,而是实现了队列接口

博客还提供了测试代码:

<span style="font-size: small;">/* * To change this template, choose Tools | Templates * and open the template in the editor. */
package testrandomaccess;  import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.RandomAccess;  /** * * @author bolong */
public class TestRandomAccess {
// 初始化列表  public static void initList(List list, int n) {  for (int i = 0; i < n; i++) {  list.add(i);  }  }
//使用循环进行对列表的迭代  public static void traverseWithLoop(List list) {  long starttime = 0;  long endtime = 0;  starttime = System.currentTimeMillis();  for (int count = 0; count <= 1000; count++) {  for (int i = 0; i < list.size(); i++) {  list.get(i);  }  }  endtime = System.currentTimeMillis();  System.out.println("使用loop迭代一共花了" + (endtime - starttime) + "ms时间");  }
//使用迭代器对列表进行迭代  public static void traverseWithIterator(List list) {  long starttime = 0;  long endtime = 0;  starttime = System.currentTimeMillis();  for (int count = 0; count <= 1000; count++) {  for (Iterator itr = list.iterator(); itr.hasNext();) {  itr.next();  }  }  endtime = System.currentTimeMillis();  System.out.println("使用Iterator迭代一共花了" + (endtime - starttime) + "ms时间");  }  public static void traverse(List list) {  long starttime = 0;  long endtime = 0;  if (list instanceof RandomAccess) {  System.out.println("该list实现了RandomAccess接口");  starttime = System.currentTimeMillis();  for (int count = 0; count <= 1000; count++) {  for (int i = 0; i < list.size(); i++) {  list.get(i);  }  }  endtime = System.currentTimeMillis();  System.out.println("迭代一共花了" + (endtime - starttime) + "ms时间");  } else {  System.out.println("该list未实现RandomAccess接口");  starttime = System.currentTimeMillis();  for (int count = 0; count <= 1000; count++) {  for (Iterator itr = list.iterator(); itr.hasNext();) {  itr.next();  }  }  endtime = System.currentTimeMillis();  System.out.println("迭代一共花了" + (endtime - starttime) + "ms时间");  }  }  public static void main(String[] args) {  ArrayList arraylist = new ArrayList();  LinkedList linkedlist = new LinkedList();  initList(arraylist, 1000);  initList(linkedlist, 1000);  traverse(arraylist);  traverse(linkedlist);  traverseWithIterator(arraylist);  traverseWithLoop(arraylist);  traverseWithIterator(linkedlist);  traverseWithLoop(linkedlist);  }
}
</span>  

结论:
根据程序输出的结果的确证明了,arraylist等实现了RandomAccessj接口的类在进行迭代时使用loop效率更高,而linkedList那些未实现该接口的类在进行迭代时使用Iterator进行迭代效率更高.

学习ArrayList 和 LinkedList小记【2】相关推荐

  1. JDK源码学习之Arraylist与LinkedList

    ArrayList和LinkedList是我们在开发过程中常用的两种集合类,本文将从底层源码实现对其进行简单介绍. 下图是Java集合类所涉及的类图. 一.ArrayList 从上面的集合类图可以看出 ...

  2. vector 插入_Java学习五分钟系列:对比Vector、ArrayList、LinkedList

    Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. Java的集合类,值得我们深入的学习,建议大家有时间的话,可以阅读一下源 ...

  3. 【java学习】Arraylist和LinkedList使用场景与性能对比

    介绍 ArrayList LinkedList 使用场景对比 两个实例: 二分查找 插入元素 总结 介绍 List 的三个子类的特点: ArrayList 底层结构是数组,底层查询快,增删慢. Lin ...

  4. 某团技术拷问:ArrayList 和 LinkedList 哪个更占空间?

    HR力荐了一个工作 4 年,目前年薪 40W+ 的候选人. 看他简历,从 JVM.MySQL.Redis,再到悲观锁.乐观锁一个都不缺,并发编程.分布式也都接触过,像是个实力派! 着急用人,就赶紧叫人 ...

  5. Java集合:ArrayList和LinkedList区别?

    ArrayList和LinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机访问get和set,ArrayL ...

  6. java温故笔记(二)java的数组HashMap、ConcurrentHashMap、ArrayList、LinkedList

    为什么80%的码农都做不了架构师?>>>    HashMap 摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型.随着JDK(Java Develo ...

  7. java集合框架05——ArrayList和LinkedList的区别

    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容. List概括 先来回顾一下List在Collection中的的框架图 ...

  8. java c 性能比较_java 中ArrayList与LinkedList性能比较

    java 中ArrayList与LinkedList性能比较 今天看一框架的代码,看到有些 可以使用ArrayList的地方 使用的是 LinkedList,用到的情景是在一个循环里面进行顺序的插入操 ...

  9. 27、ArrayList和LinkedList的区别

    在Java的List类型集合中,ArrayList和LinkedList大概是最常用到的2个了,细看了一下它们的实现,发现区别还是很大的,这里简单的列一下个人比较关心的区别. 类声明 ArrayLis ...

最新文章

  1. Linux文件与目录管理(文件查阅)
  2. 怎样让小写自动转换成大写_办公软件操作技巧031:如何在word中输入大写数字...
  3. python的tkinter的用法_Python Tkinter图形工具使用方法及实例解析
  4. Python 计算机视觉(九)—— OpenCV进行图像平滑
  5. 4.3.2 基于集合的操作
  6. 人脸识别资源推荐:20款人脸检测/识别的API、库和软件
  7. flask 配置静态文件模板文件
  8. 【Oracle】Oracle通过表名查询触发器
  9. c/c++ linux 进程 fork wait函数
  10. 上周四更新决战俄罗斯小游戏的发包问题
  11. C语言:段错误产生原因及简单的调试方法
  12. MathType删除注册表
  13. 外汇会计-概念-升水(Premium)
  14. C++中的拷贝构造函数
  15. 流程框图——各方框含义
  16. k8s出现问题导致cpu使用率过高
  17. 排查tomcat项目假死原因的简单方法
  18. windows 7 iso镜像刻录到U盘后选择安装的版本
  19. 启动报错 Bean instantiation via factory method failed
  20. Kafka 数据丢失与优化

热门文章

  1. maven出现错误 大难题-------
  2. html表格的多个下拉菜单,表格设置下拉多个选项
  3. 多页vue应用的单页面打包方法(内含打包模式的应用)
  4. 罗敏为什么不焦虑? | 一点财经
  5. 计算机辅助项目管理课程方案,计算机辅助项目管理课程设计-20210310112313.pdf--原创力文档...
  6. vue生命周期和vue-resource
  7. java.sql.SQLException: Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95...‘ for column ‘xxx‘
  8. 1.Lunix系统安装及重置root密码
  9. 如何清除win10右下角输入法图标?
  10. 软件测试工程师需要学什么?