欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vector的底层代码分析

程序员文章站 2022-12-20 19:36:04
1、vector底层代码2、vector底层代码成员变量//所有元素的数组 protected Object[] elementData;//元素数量 protected int elementCount;//容量增加值 protected int capacityIncrement; //最大数组的长度为int最大值-8private static final int MAX_ARRAY_SIZE = Integ...

[1、vector底层代码]

(https://baike.baidu.com/item/vector/3330482)
vector的底层代码分析

2、vector底层代码

修饰语和返回类型 方法 描述
public synchronized boolean add(E e) 尾部增加元素
public synchronized int indexOf(Object o, int index) 删除尾部元素
public synchronized boolean removeElement(Object obj) 获取尾部元素
public synchronized void removeElementAt(int index) 获取尾部元素

2.1、成员变量

		//所有元素的数组
        protected Object[] elementData;
		//元素数量
        protected int elementCount;
		//容量增加值
        protected int capacityIncrement;
        //最大数组的长度为int最大值-8
		private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

3、成员方法

3.1、增加元素

		public synchronized boolean add(E e) {
	        modCount++;
	        ensureCapacityHelper(elementCount + 1);
	        //下个元素为e
	        elementData[elementCount++] = e;
	        return true;
	    }
		private void ensureCapacityHelper(int minCapacity) {
	        // overflow-conscious code
	        if (minCapacity - elementData.length > 0)
	            grow(minCapacity);
	    }
	    //minCapacity是原vector容量+1;
 		private void grow(int minCapacity) {
        // overflow-conscious code
	        int oldCapacity = elementData.length;
	        //如果capacityIncrement>0,name增加capacityIncrement,否则不增加
	        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
	             capacityIncrement : oldCapacity);
	        //如果扩充后容量<minCapacity,那么minCapacity为最后的容量
	        if (newCapacity - minCapacity < 0)
	            newCapacity = minCapacity;
	        
	        if (newCapacity - MAX_ARRAY_SIZE > 0)
	            newCapacity = hugeCapacity(minCapacity);
	        elementData = Arrays.copyOf(elementData, newCapacity);
	    }
	    
	    private static int hugeCapacity(int minCapacity) {
	        if (minCapacity < 0) // overflow
	            throw new OutOfMemoryError();
	        return (minCapacity > MAX_ARRAY_SIZE) ?
	            Integer.MAX_VALUE :
	            MAX_ARRAY_SIZE;
	    }

3.2、查找元素位置

		public synchronized int indexOf(Object o, int index) {
	        if (o == null) {
	            for (int i = index ; i < elementCount ; i++)
	                if (elementData[i]==null)
	                    return i;
	        } else {
	            for (int i = index ; i < elementCount ; i++)
	                if (o.equals(elementData[i]))
	                    return i;
	        }
	        return -1;
	    }

3.3、删除元素

		public synchronized boolean removeElement(Object obj) {
		    modCount++;
		    //找到元素的索引
		    int i = indexOf(obj);
		    if (i >= 0) {
		        removeElementAt(i);
		        return true;
		    }
		    return false;
		}

		public synchronized void removeElementAt(int index) {
	        modCount++;
	        if (index >= elementCount) {
	            throw new ArrayIndexOutOfBoundsException(index + " >= " +
	                                      elementCount);
	        }
	        else if (index < 0) {
	            throw new ArrayIndexOutOfBoundsException(index);
	        }
	        int j = elementCount - index - 1;
	        //System.arraycopy方法可以将index+1以后j个元素移到index位置后,这样,最后会有一个重复的元素,那么回收掉它。
	        if (j > 0) {
	            System.arraycopy(elementData, index + 1, elementData, index, 		j);
	        }
	        elementCount--;
	        elementData[elementCount] = null; /* to let gc do its work */
	    }

3.4、改动元素

		public synchronized E set(int index, E element) {
	        if (index >= elementCount)
	            throw new ArrayIndexOutOfBoundsException(index);
	
	        E oldValue = elementData(index);
	        elementData[index] = element;
	        return oldValue;
	    }

4、vector方法来源

4.1、List接口

vector的底层代码分析

本文地址:https://blog.csdn.net/weixin_44525247/article/details/109643423

相关标签: 数据结构 java