ArrayList——ArrayList.add()源码分析

转载 2016年08月31日 10:34:17

转自http://blog.csdn.net/java2000_net/article/details/5215882

ArrayList的构造器

    public ArrayList() {  
    s(10);  
    }  
可见默认的构造器,其调用了参数为10的构造函数



    public ArrayList(int initialCapacity) {  
    er();  
        if (initialCapacity < 0)  
            throw new IllegalArgumentException("Illegal Capacity: "+  
                                               initialCapacity);  
    s.elementData = new Object[initialCapacity];  
    }  
这个带参数的构造函数,初始化了一个长度为初始容量的数组,并且创建一个Object的数组


add方法源码

 public boolean add(E e) {  
ensureCapacity(size + 1);  // Increments modCount!!  
elementData[size++] = e;  
return true;  
   } 
这里面的第一行,就是确信当前容量是否能容下新增加的对象

 public void ensureCapacity(int minCapacity) {  
modCount++;  
int oldCapacity = elementData.length;  
if (minCapacity > oldCapacity) {  
    Object oldData[] = elementData;  
    int newCapacity = (oldCapacity * 3)/2 + 1;  
        if (newCapacity < minCapacity)  
    newCapacity = minCapacity;  
           // minCapacity is usually close to size, so this is a win:  
           elementData = Arrays.copyOf(elementData, newCapacity);  
}  
   }  

此方法里,一旦发现容量不足,会自动扩充容量,新的大小是 int newCapacity = (oldCapacity * 3)/2 + 1;  也就是原有容量的1.5倍+1。然后通过底层的复制方法将原有数据复制过来;






相关文章推荐

ArrayList和LinkedList add的源码分析

ArrayList的add方法是在已存在的定长的集合中添加元素,当集合装满了,会在添加元素之前进行 扩容。LinkedList则是修改内部存的对象的引用关系,将之前的对象的引用赋给新的节点,作为新节点...

java 数组元素位移的简单方法(ArrayList add方法源码)

ArrayList中有个方法是public void add(int index, E object) 这个方法是在第index位置上插入元素。 按照常规做法,肯定是,将数组中index(包括in...
  • gacmy
  • gacmy
  • 2016年07月05日 16:16
  • 1028

数据结构之解析ArrayList源码的add,remove,set,contains

ArrayList的源码的几个重要函数解析 首先,ArrayList内部其实就是一个Object数组构成的addadd(E object) @Override public boolean ad...
  • Fourlm
  • Fourlm
  • 2016年10月11日 15:08
  • 218

Java 集合框架源码分析(一)——ArrayList

简介 ArrayList中是平常比较常用的一个集合类,经常帮助我们封装一些实体Bean的List集合。典型使用场景如下: List bookList=new ArrayList(); ...

java集合框架03——ArrayList和源码分析

1.HashTable简介         首先看一下HashTable的继承关系 [java] view plain copy   java....
  • hj7jay
  • hj7jay
  • 2016年04月22日 09:54
  • 264

java容器类源码分析——ArrayList

ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小......     首先看到对ArrayList的定义: publ...

Java 集合框架源码分析(一)——ArrayList

简介ArrayList中是平常比较常用的一个集合类,经常帮助我们封装一些实体Bean的List集合。典型使用场景如下: List bookList=new ArrayList(); bookLi...

java集合框架03——ArrayList和源码分析

上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习。首先学习List。而ArrayList又是List中最为常用的,因此本章先学习...
  • eson_15
  • eson_15
  • 2016年04月11日 15:05
  • 2869

Java基础——ArrayList源码分析

更多Java集合文章,请关注我的博客:http://blog.csdn.net/qq_30379689 Java基础——ArrayList的工作原理 本篇文章包含以下内容,请点击左上角+号展开目录...

java集合框架02——ArrayList和源码分析

上一章学习了Collection的架构,并阅读了部分源码,这一章开始,我们将对Collection的具体实现进行详细学习。首先学习List。而ArrayList又是List中最为常用的,因此本章先学习...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ArrayList——ArrayList.add()源码分析
举报原因:
原因补充:

(最多只允许输入30个字)