ArrayList详解
一、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()方法返回的iterator是fail-fast的(fail-fast是java集合(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详解的更多相关文章
- 【集合框架】JDK1.8源码分析之ArrayList详解(一)
[集合框架]JDK1.8源码分析之ArrayList详解(一) 一. 从ArrayList字表面推测 ArrayList类的命名是由Array和List单词组合而成,Array的中文意思是数组,Lis ...
- ArrayList详解-源码分析
ArrayList详解-源码分析 1. 概述 在平时的开发中,用到最多的集合应该就是ArrayList了,本篇文章将结合源代码来学习ArrayList. ArrayList是基于数组实现的集合列表 支 ...
- java集合类之ArrayList详解
一.ArrayList源码分析 1.全局变量 (1)默认容量(主要是通过无参构造函数创建ArrayList时第一次add执行扩容操作时指定的elementData的数组容量为10) private s ...
- Java.util.ArrayList详解
java.util.ArrayList就是传说中的动态数组. 继承了关系,有此可看出ArrayList与list的collection的关系 public class ArrayList<E&g ...
- 【Java集合类】ArrayList详解 (JDK7)
相信对于使用过Java的人来说,ArrayList这个类大家一定不会陌生. 数据结构课上讲过, Array是数组,它能根据下标直接找到相应的地址,所以索引速度很快,但是唯一的缺点是不能动态改变数组的长 ...
- Java ArrayList 详解
只记录目前为止关注的.JDK1.8 一.基础属性 1.1 内部参数 //空存储实例.直接new ArrayList()便是以该空数组作为实例 private static final Object[] ...
- Java 8 ArrayList 详解
GitHub Page: http://blog.cloudli.top/posts/Java-ArrayList/ ArrayList 继承于 AbstractList ,实现了 List.Rand ...
- 2 ArrayList 详解
List 是有序.可重复的容器.List中每个元素都有索引标记,可以根据元素的索引标记访问元素,从而精确控制这些元素. List 接口常用的实现类:ArrayList.LinkedList.Vecto ...
- ArrayList详解,底层是数组,实现Serializable接口
一.对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器往ArrayList中添加对象:即add(E)方法获取ArrayList中的单个对象:即get(int index)方法 ...
随机推荐
- JavaScript String对象常用方法
length 返回字符串的长度(字符数) var str='Hello World!'; str.length; charAt() 返回指定位置的字符,第一个字符位置为0 var str='Hello ...
- FCKeditor文本编辑器的使用方法
FCKeditor是一个功能强大支持所见即所得功能的文本编辑器,可以为用户提供微软office软件一样的在线文档编辑服务. 它不需要安装任何形式的客户端,兼容绝大多数主流浏览器,支持ASP.Net.A ...
- CentOS 7运维管理笔记(12)----GUI配置工具Webmin的安装
早期的Linux系统管理员或是Web管理员在修改服务器配置时使用最多的就是vi编辑器,但是现在越来越多的基于GUI界面的配置工具出现了,毕竟人们还是喜欢以直接的可视化的方式来修改服务器的配置,而不是再 ...
- 01_Nginx入门
[Nginx概述] Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-Like协议下发行.其特点是占有内存少,并发能力强,事实上Nginx ...
- Android sqlite日期存储
SQLite日期类型是以TEXT.REAL和INTEGER类型分别不同的格式表示的,对应如下:TEXT: "YYYY-MM-DD HH:MM:SS.SSS"REAL: 以Julia ...
- klee错误汇报二:KLEE的optimize选项的一个困惑
问题已经提交github:https://github.com/klee/klee/issues/650 在一个对命令行参数进行建模的符号执行过程中,添加optimize选项与不添加optimize选 ...
- HighChart利用servlet导出中文PNG图片乱码问题解决
最近用到HighChart作图,在图片导出时,出现了图片中中文乱码的问题,在网络上找了很多资料,但都没有解决,最后才发现了最容易被忽略的问题.具体见下. 由于之前有同事使用过HighChart,所以毫 ...
- idea打jar包
昨天碰到个问题:使用idea打成jar包,但是在测试环境一直报错.参考: http://blog.csdn.net/aotian16/article/details/52198378 之后发现原来的j ...
- springmvc中配置RESTful风格控制器
一般的http请求中其实只需要get和post就可以满足项目需求了,而为什么还要使用restful可能就是为了使请求url看起来更加直观,好看吧.. restful常用的请求方式:get,post,p ...
- C#复制粘贴
用C#程序复制粘贴非常简单,这里为了实用,只介绍对文字的操作,其他情况类似: Clipboard.SetText(“我是需要复制到系统剪贴板的文字”); 执行以上代码后,即可ctrl+V进行粘贴.是不 ...