java.util.ArrayList就是传说中的动态数组.


继承了关系,有此可看出ArrayList与list的collection的关系

public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable

分析期特性

具有实例化性质,从实现了serializable就可以看出来

private static final long serialVersionUID = 8683452581122892189L;

接下来定义了初始容量大小,和初始锥形。arralist里面本身存储的为一个Object类型的数组

    /*** Default initial capacity.*/private static final int DEFAULT_CAPACITY = 10;/*** Shared empty array instance used for empty instances.*/private static final Object[] EMPTY_ELEMENTDATA = {};private transient Object[] elementData;

使用arraylist时需要实例化:有三种

  /*** 初始化一个给定大小容量的数组List,主要用于如果本事知道这个list的大小时。* 能优化如果大小超过默认容量时导致arralist每次都要去增加并创建一个新的list* @param  initialCapacity  the initial capacity of the list* @throws IllegalArgumentException if the specified initial capacity*         is negative*/public ArrayList(int initialCapacity) {super();if (initialCapacity < 0)throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);this.elementData = new Object[initialCapacity];}/*** 使用默认的大小10*/public ArrayList() {super();this.elementData = EMPTY_ELEMENTDATA;}/*** 根据一个collection来定义一个arralist** @param c the collection whose elements are to be placed into this list* @throws NullPointerException if the specified collection is null*/public ArrayList(Collection<? extends E> c) {elementData = c.toArray();size = elementData.length;// c.toArray might (incorrectly) not return Object[] (see 6260652)if (elementData.getClass() != Object[].class)elementData = Arrays.copyOf(elementData, size, Object[].class);}

Arraylist有提供期可能存在过多的空容量时清除处理

    public void trimToSize() {modCount++;if (size < elementData.length) {elementData = Arrays.copyOf(elementData, size);}}

另一个知识点。当arraylist新增时如果当前容量已满时的处理过程

  public boolean add(E e) {ensureCapacityInternal(size + 1);  // 判断容量是否超标elementData[size++] = e;return true;}private void ensureCapacityInternal(int minCapacity) {if (elementData == EMPTY_ELEMENTDATA) {minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);// 容量超标情况
        }ensureExplicitCapacity(minCapacity);}private void ensureExplicitCapacity(int minCapacity) {modCount++;// overflow-conscious codeif (minCapacity - elementData.length > 0)// 如果超标,则处理
            grow(minCapacity);}private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length; // 容量大小int newCapacity = oldCapacity + (oldCapacity >> 1); //超标增加量计算法,x+x/2=50%左右if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);// 赋值原来的数组,并增加newCapacity个容量elementData = Arrays.copyOf(elementData, newCapacity);} private static int hugeCapacity(int minCapacity) {if (minCapacity < 0) // overflowthrow new OutOfMemoryError();return (minCapacity > MAX_ARRAY_SIZE) ?Integer.MAX_VALUE :MAX_ARRAY_SIZE;}

转载于:https://www.cnblogs.com/hwaggLee/p/4509030.html

Java.util.ArrayList详解相关推荐

  1. JAVA.UTIL.ARRAYLIST 详解

    [size=medium][color=red][b]java.util.ArrayList[/b][/color][/size] [size=medium] 数组和数组列表之间有着重大的区别.数组是 ...

  2. java多线程学习-java.util.concurrent详解

    http://janeky.iteye.com/category/124727 java多线程学习-java.util.concurrent详解(一) Latch/Barrier 博客分类: java ...

  3. java多线程详解 六_java多线程学习-java.util.concurrent详解(六) Exchanger

    转载于:http://janeky.iteye.com/blog/769965 我们先来学习一下JDK1.5 API中关于这个类的详细介绍: "可以在pair中对元素进行配对和交换的线程的同 ...

  4. Java并发包-java.util.concurrent详解

    转载自https://blog.csdn.net/axi295309066/article/details/65665090 一.阻塞队列BlockingQueue BlockingQueue通常用于 ...

  5. java.util包详解

    介绍Java的实用工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结 ...

  6. java.util.ConcurrentModificationException详解

    一.异常产生 当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationExcept ...

  7. java多线程学习-java.util.concurrent详解(一) Latch/Barrier

    2019独角兽企业重金招聘Python工程师标准>>> Java1.5提供了一个非常高效实用的多线程包:java.util.concurrent, 提供了大量高级工具,可以帮助开发者 ...

  8. java多线程学习-java.util.concurrent详解(五) ScheduledThreadPoolExecutor

    转载于:http://janeky.iteye.com/blog/769965 我们先来学习一下JDK1.5 API中关于这个类的详细介绍: "可另行安排在给定的延迟后运行命令,或者定期执行 ...

  9. JAVA笔记- JAVA集合类之ArrayList详解

    1- 集合概述 A) 面向对象编程语言对事物的描述都是通过对象来体现的. 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储,就不能是一个基本的变量,而应该是一个容器 ...

  10. java拉姆达表达式事例,Java Lambda表达式详解和实例

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体( ...

最新文章

  1. Struts2标签库
  2. C/MFC如何获得应用程序当前路径(整理)
  3. 台湾大学林轩田机器学习基石课程学习笔记6 -- Theory of Generalization
  4. PHP各种数据类型转换
  5. Linux安装weblogic方式,Linux下weblogic安装图解
  6. Hadoop MapReduce执行过程(一)
  7. 异步tcp通信——APM.Core 服务端概述
  8. 一键换机显示二维码错误_【丽迪资讯】装路由器,忘记上网账号跟密码?别担心360amp;磊科智能路由器一键换机轻松搞定!...
  9. popwindow下拉筛选 二级联动_工作录入数据需要三级联动下拉菜单,Excel轻松制作!-Excel教程...
  10. java代码如何降低重复率_JAVA 如何实现大文本去除重复行
  11. python实现逻辑回归牛顿法求参数_教程 | 如何通过牛顿法解决Logistic回归问题
  12. 分布式文件系统HDFS原理篇
  13. 人工智能学习(十一):机器人学
  14. 基于python的数字图像处理--学习笔记(二)
  15. 使用jquery easyui datetimebox 设置默认时间
  16. 路由器——计算机网络
  17. 深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel文档库openpyxl
  18. JMeter学习(四)使用JMeter的HTTP代理服务器实现抓包功能
  19. Vision Transformer 必读系列之图像分类综述(二): Attention-based
  20. HTTP Status 500 - Failed to evaluate expression 'ROLE_USER'

热门文章

  1. 海康摄像头4G内网连接方案
  2. 怎么录制屏幕视频?3个简单实用方法分享
  3. orcale中like用法详解
  4. 卷积神经网络中感受野的详细介绍
  5. 通信网络与IP网络底层传输技术梳理(SONET/SDH/OTN/ATM/Ethernet/MPLS/PTN...)
  6. 查看gup服务器内核信息,国内免费gpu服务器试用
  7. 用HTML+CSS做一个漂亮简单大学生校园班级网页
  8. Ubuntu 如何安装 微信?实测
  9. 功率 dbm vrms vpp mw换算 (正弦波)
  10. 鸡啄米教程之VS2010/MFC编程入门教程之目录和总结