java源码


java源码笔记

注:源码学习是一个长久的过程,目前有的程序还模糊,相信自己以后会明白的

1.ArrayList

ArrayList是由长度可变的数组组成的,允许null值,与Vector相类似,该类的方法不同步
size、empty、get、set、iterator等为常数时间,add方法是一个O(n)的时间复杂度
与linkedList相比较常数因子比较低,有一个初始的容量,列表元素至少和数组一样,
可自动扩容grow()

2.继承与实现关系

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    //初始大小10,用户可以手动指定
    private static final int DEFAULT_CAPACITY = 10;
    //底层使用Object数组实现
    //底层的扩容函数,扩容为原来的1.5倍
     private void grow(int minCapacity) {
        // overflow-conscious code
        int oldCapacity = elementData.length;
        //新数组的长度=旧数组的长度+旧数组长度右移一位(相当于除以2)
        //新数组长度是旧数组的1.5倍
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);
    }


}

文章作者: it星
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 it星 !
 上一篇
WebService学习 WebService学习
it星
WebService学习注:(不会maven的可以先去学习maven配置和简单的命令) Webservice介绍apacheCXF简单测试1.pox文件引用: <!--项目依赖--> <dependencies> &l
下一篇 
JVM虚拟机学习 JVM虚拟机学习
关于该学习笔记参考网上的jvm课程以及一些文章的讲解 JVM结构: 局部变量表存放了编译期可知的基本数据类型、对象引用和returnAddress类型,其所需的内存空间在编译期间完成分配,方法运行期间不会改变局部变量表的大小。 除了程序计
  目录