博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
容器ArrayList原理(学习)
阅读量:5862 次
发布时间:2019-06-19

本文共 810 字,大约阅读时间需要 2 分钟。

一、概述

动态数组,容量能动态增长,元素可以为null,用数组存储,非线程同步(vector线程同步)

每个 ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小,自动增长(默认初始大小为10,然后递增式大约1.5倍增长)会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造 ArrayList 时指定其容量。在添加大量元素前,应用程序也可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量,这可以减少递增式再分配的数量。

 

二、实现

底层为数组存储;

 add操作 =》

先ensureCapacity ;扩容 newCapacity = (oldCapacity * 3)/2 + 1;之后Arrays.copyOf数组拷贝;

 

 get操作=》

index越界抛异常

 

 remove操作=》

public E remove(int index) :return oldValue;        数据再拷贝使用  System.arraycopy
public boolean remove(Object o) 三、容量增长,使用注意点 数组进行扩容时,会将老数组中的元素重新拷贝一份到新的数组中,每次数组容量的增长大约是其原容量的 1.5 倍(从newCapacity = (oldCapacity * 3)/2 + 1;)。 这种操作的代价是很高的,因此在实际使用时,我们应该尽量避免数组容量的扩张。 当我们可预知要保存的元素的多少时,要在构造 ArrayList 实例时,就指定其容量,以避免数组扩容的发生。 或者根据实际需求,通过调用ensureCapacity 方法来手动增加 ArrayList 实例的容量。 四、Fail-Fast 机制
 

转载于:https://www.cnblogs.com/lwcoding/p/6971077.html

你可能感兴趣的文章
Import declarations are not supported by current JavaScript version--JavaScript版本不支持导入声明...
查看>>
晶振不起振的原因及其解决方法
查看>>
2015年个人总结
查看>>
《系统架构师》——操作系统和硬件基础
查看>>
如何看待一本图书
查看>>
oracle参数列表
查看>>
Wordpress3.2去除url中的category(不用插件实现)
查看>>
macOS Sierra 代码显示未来 Mac 将搭载 ARM 芯片
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
开发进度——4
查看>>
JS里验证信息
查看>>
Akka actor tell, ask 函数的实现
查看>>
windows10 chrome 调试 ios safari 方法
查看>>
Hello , Ruby!
查看>>
Netty 4.1.35.Final 发布,经典开源 Java 网络服务框架
查看>>
详解Microsoft.AspNetCore.CookiePolicy
查看>>
SCDPM2012 R2实战一:基于SQL 2008 R2集群的SCDPM2012 R2的安装
查看>>
SQL SERVER中字段类型与C#数据类型的对应关系
查看>>
Linux lsof命令详解
查看>>
SVG path
查看>>