一、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.插入,删除操作消耗内存较大;

ArrayList详解的更多相关文章

  1. 【集合框架】JDK1.8源码分析之ArrayList详解(一)

    [集合框架]JDK1.8源码分析之ArrayList详解(一) 一. 从ArrayList字表面推测 ArrayList类的命名是由Array和List单词组合而成,Array的中文意思是数组,Lis ...

  2. ArrayList详解-源码分析

    ArrayList详解-源码分析 1. 概述 在平时的开发中,用到最多的集合应该就是ArrayList了,本篇文章将结合源代码来学习ArrayList. ArrayList是基于数组实现的集合列表 支 ...

  3. java集合类之ArrayList详解

    一.ArrayList源码分析 1.全局变量 (1)默认容量(主要是通过无参构造函数创建ArrayList时第一次add执行扩容操作时指定的elementData的数组容量为10) private s ...

  4. Java.util.ArrayList详解

    java.util.ArrayList就是传说中的动态数组. 继承了关系,有此可看出ArrayList与list的collection的关系 public class ArrayList<E&g ...

  5. 【Java集合类】ArrayList详解 (JDK7)

    相信对于使用过Java的人来说,ArrayList这个类大家一定不会陌生. 数据结构课上讲过, Array是数组,它能根据下标直接找到相应的地址,所以索引速度很快,但是唯一的缺点是不能动态改变数组的长 ...

  6. Java ArrayList 详解

    只记录目前为止关注的.JDK1.8 一.基础属性 1.1 内部参数 //空存储实例.直接new ArrayList()便是以该空数组作为实例 private static final Object[] ...

  7. Java 8 ArrayList 详解

    GitHub Page: http://blog.cloudli.top/posts/Java-ArrayList/ ArrayList 继承于 AbstractList ,实现了 List.Rand ...

  8. 2 ArrayList 详解

    List 是有序.可重复的容器.List中每个元素都有索引标记,可以根据元素的索引标记访问元素,从而精确控制这些元素. List 接口常用的实现类:ArrayList.LinkedList.Vecto ...

  9. ArrayList详解,底层是数组,实现Serializable接口

    一.对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器往ArrayList中添加对象:即add(E)方法获取ArrayList中的单个对象:即get(int index)方法 ...

随机推荐

  1. C语言string.h中常用字符函数介绍

    原文:http://www.cnblogs.com/xuwenmin888/archive/2013/05/03/3057883.html strcpy 函数名: strcpy 功 能: 拷贝一个字符 ...

  2. java几种基本排序算法

    1.选择排序 原理:将数组的每一个元素和第一个元素相比较,如果小于第一个元素则交换,选出第一小的,依次选出第二小,第三小的.... 代码 int[] a = {1,3,2,5}; int i,j,te ...

  3. javascript 同源策略及web安全

    同源策略为什么而生? JS可以读取/修改网页的值. 一个浏览器中,打开一个银行网站和一个恶意网站,如果恶意网站能够对银行网站进行修改,那么就会很危险. 你打开了恶意网站和另一个网站,如果没有同源限制, ...

  4. 【Leetcode】【Medium】Validate Binary Search Tree

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  5. sql with 写法

    with h_asign_id as ( select asign_id from assign_h h left join assignment a on a.id = h.asign_id whe ...

  6. rolllup巧用

    --构造环境drop table dept purge;drop table emp purge;create table dept as select * from scott.dept;creat ...

  7. January 22 2017 Week 4 Sunday

    Dare and the world always yields. 大胆挑战,世界总会让步. Try it if you dare. If you want to change, if you wan ...

  8. ZT UML 类与类之间的关系

    1.聚合关系是关联关系的一种,是强的关联关系.     2.聚合是整体和部分之间的关系,例如汽车由引擎.轮胎以及其它零件组成. 3.聚合关系也是通过成员变量来实现的.但是,关联关系所涉及的两个类处在同 ...

  9. SAPGUI系统登录页面配置的SAProuter有什么用

    大家在安装完SAPGUI后,准备添加系统列表进行登录时,注意过这个SAProuter字段么? 从SAP的帮助文档上可以找到SAProuter的定义: https://help.sap.com/saph ...

  10. c++中左值的含义

    <<cpp primer plus 6th edition>>中的原文(Chapter 8 Adventures in Functions): What is an lvalu ...