集合框架源码学习之ArrayList

  • 时间:
  • 浏览:1

总体知识脉络

0-0-1. 前言

0-0-2. 集合框架知识回顾0-0-3. ArrayList简介0-0-4. ArrayList核心源码 0-0-5. ArrayList源码剖析 0-0-6. ArrayList经典Demo

  ArrayList 的底层是数组队列,大概动态数组。与Java中的数组相比,它的容量能动态增长。在加带大量元素前,线程池池还并能 使用ensureCapacity 操作来增加 ArrayList 实例的容量。这还并能 减少递增式再分配的数量。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable有有哪些接口。

  在其他同学 学数据型态的日后就知道了线性表的顺序存储,插入删除元素的时间僵化 度为O(n),求表长以及增加元素,取第 i 元素的时间僵化 度为O(1)

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

  ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,其他同学 即还并能 通过元素的序号快速获取元素对象,这也不 快速随机访问。

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

  ArrayList 实现java.io.Serializable接口,这原因分析 ArrayList支持序列化能通过序列化去传输

  和Vector不同,ArrayList中的操作就有线程池池安全的!什么都有,建议在单线程池池中才使用ArrayList,而在线程池池池中还并能 选择Vector肯能CopyOnWriteArrayList。

联系:

看两者源代码还并能 发现copyOf()组织组织结构调用了System.arraycopy()最好的法律法律依据

区别:1,arraycopy()时需目标数组,将原数组拷贝到你当时人定义的数组里,你要还并能 选择拷贝的起点和长度以及上放新数组中的位置

  扩容机制代码肯能做了完整篇 的解释。另外值得注意的是其他同学 很容易忽略的另兩个运算符:移位运算符

  简介:移位运算符也不 在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为有一种:<<(左移)>>(带符号右移)>>>(无符号右移)

  作用对于大数据的2进制运算,位移运算符比有有哪些普通运算符的运算要快什么都有,肯能线程池池仅仅移动一下而已,不去计算,也不 提高了波特率,节省了资源

  比如这里:int newCapacity = oldCapacity + (oldCapacity >> 1);

右移一位大概除2,右移n位大概除以2的n次方。这里oldCapacity 明显右移了1位什么都有大概oldCapacity /2。

  ArrayList有兩个组织组织结构类,其中的Itr是实现了Iterator接口,一起重写了上端的hasNext()next()remove()等最好的法律法律依据;其中的ListItr继承Itr,实现了ListIterator接口,一起重写了hasPrevious()nextIndex()previousIndex()previous()set(E e)add(E e)等最好的法律法律依据,什么都有这也还并能 看出了Iterator和ListIterator的区别:ListIterator在Iterator的基础上增加了加带对象,修改对象,逆向遍历等最好的法律法律依据,有有哪些是Iterator没法 实现的。具体还并能 参考http://blog.csdn.net/a597926661/article/details/7679765。其中的SubList继承AbstractList,实现了RandmAccess接口,类组织组织结构实现了对子序列的增完整篇 查等最好的法律法律依据,但它一起也充分利用了组织组织结构类的优点,也不 共享ArrayList的全局变量,类事检查器变量modCount,数组elementData等,什么都有SubList进行的增完整篇 查操作就有对ArrayList的数组进行的,并没法 创建新的数组。(组织组织结构类这里参考了这位老兄的博客http://blog.csdn.net/ljcitworld/article/details/52041836)

  通过上端源码其他同学 发现这另兩个实现数组qq克隆好友 的最好的法律法律依据被广泛使用你要什么都有地方就有点硬巧妙。比如下面add(int index, E element)最好的法律法律依据就很巧妙的用到了arraycopy()最好的法律法律依据让数组当时人qq克隆好友 当时人实现让index刚开始英文英文英文日后的所有成员后移另兩个位置:

  这篇文章,其实几天前就肯能在图书馆写出来了,不过手一抖几条删除键就都没法 了,什么都有时不时拖到了现在。这篇文章在分析ArrayList的日后对ArrayList源码中用到的比较好的语法也会作以陈述。希望通过这篇文章还并能 你要你从本质上认识ArrayList,笔者愚笨,如若遇到错误敬请告知。

欢迎关注我的微信公众号(分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取):

又如toArray()最好的法律法律依据中用到了copyOf()最好的法律法律依据