ArrayList详解
2018-06-29 06:16:36来源:博客园 阅读 ()
一、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.插入,删除操作消耗内存较大;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:RabbitMQ入门:总结
下一篇:鲁滨逊漂流记游戏
- 数据源管理 | Kafka集群环境搭建,消息存储机制详解 2020-06-11
- Java--Stream流详解 2020-06-10
- B树和B+树的插入、删除图文详解 2020-06-09
- Spring Boot 2.3 新特性优雅停机详解 2020-06-08
- 详解SpringBoot(2.3)应用制作Docker镜像(官方方案) 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash