一、ArrayList类介绍:(这里给出jdk1.8源码上中文翻译)

  ArrayList是List接口以可变数组方式实现的,实现了所有的lis接口中的操作,并容许有null等所有元素。除了实现了List接口之外,ArrayList还提供了巧妙控制存储在实例内部的数组大小的方法。(ArrayList大体上和Vector相同,除了它是不同步的之外。)

  size(),isEmpty(),get(),set(),iterator(),listIterator()的时间复杂符是常量级别(constant time),add()方法的时间复杂度是可变常量级别(amortized constant time),即为O(n)。大致上说,剩余方法的时间复杂度都是线性时间(linear time)。相较于LinkedList的实现,ArrayList的常量因子(constant factor)较低。

  每一个ArrayList实例都有一个容量(capacity),容量是存储在list中元素数组的大小。容量至少和list的大小是一样的。当添加元素时,容量自动增长。这种自增长策略的细节就不说了。

  在增加大量元素之前使用ensureCapacity,就能扩大ArrayList的容量。这可能会减少添加重定位的数量。

  提示:ArrayList是异步的。如果多个线程同步进入一个ArrayList实例,并且至少一个线程修改了list的结构,那么一定要在外部进行synchronized操作。(结构上的修改指的是增加或者删除一个或多个元素,或者明确的resize 内部数据的大小;仅仅改变一个元素的值并不是结构修改。)这通常是通过在自然封装列表的某个对象上进行同步来完成的。

  如果没有这样的对象存在,list应该被“封装”通过使用Collections.synchronizedList方法。这个操作最好在创建时执行,以防止意外的异步的进入到list中:

List list = Collections.synchronizedList(new ArrayList(...));

  通过ArrrayList的iterator()和listInterator()方法返回的iteratorfail-fast的(fail-fastjava集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。
  例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。)如果list在iterator创建后发生了结构上的修改,iterator会抛出ConcurrentModificationException异常。从而,面对同步修改操作,iterator将快速利落的失败,而不是冒着风险,在将来不确定的时间发生不确定的行为。

  提示:iterator的fail-fast机制不能被保证像他自身一样,通常来讲,是不可能去做保证防止异步的同步修改。Fail-fast机制的Iterator尽最大努力抛出Concurrent-ModificationException。因此,通过写一个依靠这个异常来保障其正确性的程序是错误的:Iterator的fail-fast机制应该仅被用做检测BUG。

  这个类是Java Collection FrameWork 的一个成员。

  ----------------------------  以上便是jdk1.8中ArrayList的中文翻译  ----------------------------

二、ArrayList性能简介:

  1.ArrayList 实现了 List 接口;

  2.内部以数组形式存储;源码:Object[] elementData;

  3.默认容量为10;

  4.自增长50%;  源码:newCapacity = oldCapacity + ( oldCapacity>>1);

  5.异步的;

  6.使用索引来定位对象,取值相率高;

  7.插入,删除操作消耗内存较大;

最新文章

  1. Lucene系列-分析器
  2. IntelliJ IDEA 快捷键备忘
  3. 菜鸟学JS(五)——window.onload与$(document).ready()
  4. 关于sql 的convert 格式设置
  5. char引发的血案
  6. CMD-CMD命令之新建一个用户!
  7. eclipse汉化安装
  8. 解锁Scott过程中出现的问题及解决办法
  9. Visual Studio 2013新功能
  10. 【HAOI2007】理想的正方形
  11. 证据权模型(C#版)
  12. ubuntu系统中crontab的使用介绍
  13. JavaScrpt笔记之第二天
  14. hihocoder #1159 : 扑克牌
  15. AMD,CMD,UMD,CommonJS
  16. FFmpeg源代码简单分析:日志输出系统(av_log()等)
  17. PA 模块常用表2
  18. Maven 那点事儿(转)
  19. ubuntu1604使用之旅——安装samba
  20. PMP:3.项目经理角色

热门文章

  1. ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组
  2. 关于background定位
  3. Java的异常处理throw和throws的区别
  4. WINDOWS API ——CREATETOOLHELP32SNAPSHOT——查找进程
  5. Android 单元测试Junit
  6. 【Machine Learning】决策树之简介(1)
  7. windows 64位 安装mvn提示 不是内部或外部命令
  8. Nginx(持续更新中)
  9. svn up (svn update) 状态缩写含义
  10. 初看Mybatis 源码 (三) SQL是怎么执行的