码迷,mamicode.com
首页 > 其他好文 > 详细

ArrayList

时间:2019-05-16 21:47:19      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:因此   access   类继承   构造   使用   9.png   jdk   obj   继承   

1、ArrayList类继承和实现结构:

技术图片

2、ArrayList底层是数组实现,默认数组大小为10。当数组大小不够时会进行扩容。所以也就说ArrayList底层是由动态数组实现,因为数组长度可变。每次扩容长度为:(原数组长度*3)/2+1。(即是1.5倍,JDK1.8使用方式是:原数据长度>>1)

3、因为ArrayList底层是由数组实现的,加上实现了RandomAccess接口,所以适合随机访问查找,即get的时候非常快。另外顺序添加数据也非常方便。

4、也因为ArrayList底层是由数组实现的,当需要扩容或插入数据或删除数据时,都会涉及一次数组复制,如果要复制的元素非常多,那么会比较耗费性能。

5、ArrayList与Vector的区别:
a.ArrayList是非线性安全的,Vector是线性安全的(Vector类的大多数方法都有synchronizedList关键字修饰)。
b.Vector初始化数组长度为10,这跟ArrayList一样。但Vector可以自定义增长因子(扩容),通过构造方法,默认扩容为原数组的2倍,即自增一倍。

6、为什么ArrayList的elementData是用transient修饰的?
ArrayList实现了Serializable接口,这意味着ArrayList是可以被序列化的,用transient修饰elementData意味着不希望elementData数组被序列化。这是为什么?因为序列化ArrayList的时候,ArrayList里面的elementData未必是满的,比方说elementData有10的大小,但是只用了其中的3个,那么是否有必要序列化整个elementData呢?显然没有这个必要,因此ArrayList中重写了writeObject方法和readObject方法。

ArrayList

标签:因此   access   类继承   构造   使用   9.png   jdk   obj   继承   

原文地址:https://www.cnblogs.com/Jin1000x/p/10878155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!