您的位置:首页 > 编程语言 > Java开发

ArrayList源码分析

2017-09-23 09:47 246 查看
ArrayList简介

ArrayList 是一个数组队列,相当于动态数组

ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能

ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问

ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆

ArrayList 实现Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输

和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList

源码

构造函数

add()

add(index,element)添加元素到数组中指定位置的时候,需要将该位置及其后边所有的元素都整块向后复制一位

remove()

remove(Object o)需要遍历数组

remove(int idnex) 不需要遍历数组,只需判断index是否符合条件即可,效率比remove(Object o)高

get()

获取指定位置上的元素时,可以通过索引直接获取(O(1))

set()

contains()

需要遍历数组

clear()

TrimtoSzie()

iterator

使用iterator遍历可能会引发多线程异常

小结

ArrayList自己实现了序列化和反序列化的方法,因为它实现了writeObject(ObjectOutputStream s)和readObject(ObjectInputStream s)

ArrayList基于数组方式实现,无容量的限制(会扩容)

添加元素时可能要扩容(所以最好预判一下),删除元素时不会减少容量(若希望减少容量,trimToSize()),删除元素时,将删除掉的位置元素置为null,下次gc就会回收这些元素所占的内存空间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  源码 java arraylist