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就会回收这些元素所占的内存空间
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中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析
- arraylist源码分析
- java源码分析之集合框架 ArrayList 03
- Java源码分析之ArrayList
- java容器源码分析(三)——ArrayList
- java源码分析之ArrayList
- Java-ArrayList源码分析及示例
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- 从源码分析ArrayList和LinkList的区别
- ArrayList源码分析
- ArrayList源码分析
- 容器源码分析之ArrayList(二)
- android中ArrayList源码分析
- java ArrayList源码分析
- 【JUC】JDK1.8源码分析之CopyOnWriteArrayList(六)
- ArrayList源码分析
- ArrayList源码分析 JDK1.8
- ArrayList源码分析
- Java容器深入研究(jdk 1.8)--- ArrayList总结与源码分析
- java学习之旅59--模拟ArrayList容器的底层实现_JDK源码分析ArrayList