java.util.ArrayList 实例推动源码分析

以新new一个arrayList来分析arrayList的方法都干了些什么。

//step1:实例化ArrayList
		ArrayList list=new ArrayList();
		//对应源码:
	    /*arraylist构造器,初始化elementData为一个空数组,
	      DEFAULTCAPACITY_EMPTY_ELEMENTDATA为静态变量空的数组*/
	      public ArrayList() {
	        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
	    }
		//step2:添加基础元素调用list的add方法:
		list.add("hello word");
		//对应源码:
	    public boolean add(E e) {
	     	/*此方法是重点方法,里面的逻辑为,如果elementData为空那么增加默认的数组长度为10,
	     	  如果elementData不为空,size+1大于elementData数组长度,那么开始扩容:扩容的规则为如果size+1小于当前数组长度的1.5倍,那么扩容到当前数组的1.5倍,然后
	     	 注意:扩容最大到Integer.MAX_VALUE*/
	        ensureCapacityInternal(size + 1);  // size为当前数组元素个数
	        elementData[size++] = e;
	        return true;
	    }
		//step3:获取元素的方法,是从数组中获取下标对应的值,不用多说
		list.get(0);
		//step4:删除指定内容
		list.remove(0);
		//对应源码:
	    public E remove(int index) {
	        rangeCheck(index);

	        modCount++;
	        E oldValue = elementData(index);

	        int numMoved = size - index - 1;
	        if (numMoved > 0)
	        	/*关键方法:  public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);
                 src:源数组;	srcPos:源数组要复制的起始位置;

				dest:目的数组;	destPos:目的数组放置的起始位置;	length:复制的长度。
				
				注意:src and dest都必须是同类型或者可以进行转换类型的数组.
				
				有趣的是这个函数可以实现自己到自己复制,比如:
				
				int[] fun ={0,1,2,3,4,5,6}; 
				
				System.arraycopy(fun,0,fun,3,3);
				
				则结果为:{0,1,2,0,1,2,6};
				
				实现过程是这样的,先生成一个长度为length的临时数组,将fun数组中srcPos 
				
				到srcPos+length-1之间的数据拷贝到临时数组中,再执行System.arraycopy(临时数组,0,fun,3,3).**/
				
	            System.arraycopy(elementData, index+1, elementData, index,
	                             numMoved);
	        elementData[--size] = null; 

	        return oldValue;
	    }







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值