ArrayList源码分析

  • 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就会回收这些元素所占的内存空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值