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。然后通过底层的复制方法将原有数据复制过来;






小白学习之路(三):java ArrayList源码add操作和remove操作学习

今天稍微看了下jdk 源码中 ArrayList 的两个常用操作add   和  remove 以下是个人学习心得,个人学习记录,如有错误,欢迎大家纠正。 ArrayList 实际上就是构建...
  • qq_21071767
  • qq_21071767
  • 2015年07月15日 09:28
  • 922

ArrayList的add()方法使用

How to avoid null insertion in ArrayList? 如何避免在ArrayList零插入? Tags: java source 标签: java sour...
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2014年11月25日 23:37
  • 4791

Android进阶(四)一个APP引发的思索之ArrayList的add总是添加相同的值

ArrayList的add总是添加相同的值 最近在写一个小的Android APP,在用ArrayList的add时,总是出现添加相同值的现象。如下图所示:                      ...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2015年04月21日 18:30
  • 52148

java源码分析之ArrayList

ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小......     认真阅读本文,我相信一定会对你有帮助。比如...
  • jzhf2012
  • jzhf2012
  • 2013年01月25日 08:52
  • 28186

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

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

ArrayList源码分析(JDK1.8)

ArrayList源码分析JDK1.8
  • chun0801
  • chun0801
  • 2016年05月23日 15:14
  • 4224

java源码分析之集合框架 ArrayList和LinkedList的区别05

List概括 先来回顾一下List在Collection中的的框架图: 从图中我们可以看出: 1. List是一个接口,它继承与Collection接口,代表有序...
  • wangnanwlw
  • wangnanwlw
  • 2016年08月17日 13:35
  • 569

ArrayList源码分析(基于JDK8)

ArrayList 源代码解读,以及ArrayList特点总结
  • fighterandknight
  • fighterandknight
  • 2017年03月12日 00:23
  • 1773

Java容器深入研究(jdk 1.8)--- ArrayList总结与源码分析

结构: public class ArrayList extends AbstractList         implements List, RandomAccess, Cloneable, ja...
  • u012883858
  • u012883858
  • 2016年05月13日 15:53
  • 1473

arraylist的迭代器的实现研究---其中的iterator(不是listiterator)---(源码)

总结: 1.什么next,hasnext—-其实不是next,是当前容器内元素数组的指针指向的元素,其实是当前 2.必须在next()后使用remove()【因为只有next()会改变lastre...
  • tcg_gd
  • tcg_gd
  • 2016年05月05日 15:18
  • 673
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ArrayList——ArrayList.add()源码分析
举报原因:
原因补充:

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