全国热线

400-080-3312

全国监督投诉热线:9:00-23:00

看源代码可了解深刻,通过JAVA源码来分析ArrayList主要特性

Java在编程行业可以说是鼻祖了,就算现在有很多编程语言出来,还是有很多企业在应Java编程,可以说现在的Java编程语言已经成为现在一种基本语言,想要在编程行业走下去,Java已经是必修课,现在南京学码思Java培训机构就通

  Java在编程行业可以说是鼻祖了,就算现在有很多编程语言出来,还是有很多企业在应Java编程,可以说现在的Java编程语言已经成为现在一种基本语言,想要在编程行业走下去,Java已经是必修课,现在南京学码思Java培训机构就通过JAVA源码来分析ArrayList主要特性。

1.jpeg

  ArrayList数据结构


  ArrayList是应用更加广泛的动态数组实现,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。


  public class ArrayList<E>extends AbstractList<E>implements List<E>,RandomAccess,Cloneable,java.io.Serializable{private static final long serialVersionUID=8683452581122892189L;private static final int DEFAULT_CAPACITY=10;private static final Object[]EMPTY_ELEMENTDATA={};private static final Object[]DEFAULTCAPACITY_EMPTY_ELEMENTDATA={};transient Object[]elementData;//non-private to simplify nested class access private int size;......


  默认大小:


  我们在使用数组的时候都是指定数组大小的,在ArrayList中我们也是有默认的初始大小,初始大小默认是10;


  private static final int DEFAULT_CAPACITY=10;

2.jpeg

  性能分析


  ArrayList作为动态数组,其内部元素以数组形式顺序存储的,所以非常适合随机访问的场合。除了尾部插入和删除元素,往往性能会相对较差,比如我们在中间位置插入一个元素,需要移动后续所有元素。


  插入元素:


  ArrayList在执行插入元素是超过当前数组预定义的最大值时,数组需要扩容,扩容过程需要调用底层System.arraycopy()方法进行大量的数组复制操作。


  public boolean add(E e){ensureCapacityInternal(size+1);//Increments modCount!!elementData[size++]=e;return true;}

3.jpeg

  删除元素:


  在删除元素时并不会减少数组的容量,如果需要缩小数组容量,可以调用trimToSize()方法。在查找元素时要遍历数组,对于非null的元素采取equals的方式寻找。


  private void ensureCapacityInternal(int minCapacity){if(elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){minCapacity=Math.max(DEFAULT_CAPACITY,minCapacity);}ensureExplicitCapacity(minCapacity);}

4.jpeg

  ArrayList扩容


  ArrayList每次扩容如下图代码中每次是原来的1.5倍。


  int newCapacity=oldCapacity+(oldCapacity>>1);

5.jpeg

  ArrayList安全性


  非线程安全;

6.jpeg

  希望通过上文的介绍,可以帮助大家,当然如果您还想对Java有更多的了解,或者还有对Java不懂的地方,当然如果您刚上班,对Java还有些陌生,都可以和南京Java培训机构在线老师,沟通一下。


上一篇:Java学习的基础知识有哪些呢?
下一篇:分享Java函数式编程知识

相关推荐

免费试听 | 学费咨询 | 在线报名 | 申请补贴 | 软件培训 | 网站地图

2016-2020 南京学码思教育科技有限公司 .All Rights Reserved

苏ICP备16033487号 www.njxms.com.cn

全国热线

400-080-3312

全国监督服务热线:9:00-23:00