Vector底层源码分析-----集合章节(二)

Vector底层源码分析

  1. 定义说明:
    public class Vector extends AbstractList
    implements List, RandomAccess, Cloneable,java.io.Serializable
  2. 底层也是动态数组 protected Object[] elementData;
  3. Vector它是线程同步的,Vector操作的方法带有sychronized
  4. 在开发中,需要线程同步的时候使用Vector(多线程环境)
package vector底层源码分析;

import java.util.Vector;

/**
 * test
 *
 * @author: huanghao
 * @createTime: 2022/05/04 23:33
 * @description: vector 底层源码
 */
@SuppressWarnings({"all"})
public class VectorSource {
    public static void main(String[] args) {
        //无参构造
        Vector vector = new Vector();
//        Vector vector = new Vector(8);
        for (int i = 0; i < 10; i++) {
            vector.add(i);
        }
        vector.add(100);
        System.out.println(vector);
        /*
        1. new Vector(); 底层
            public Vector() {
                this(10);
            }
       //有参构造  Vector vector = new Vector(8);

        //走的方法是:
        public Vector(int initialCapacity) {
                this(initialCapacity, 0);
            }
        2.vector.add(i)
        2.1 下面这个方法执行添加数据到vector集合
        public synchronized boolean add(E e) {
            modCount++;
            ensureCapacityHelper(elementCount + 1);
            elementData[elementCount++] = e;
            return true;
        }
        2.2 判断是否需要扩容 条件:minCapacity - elementData.length > 0
        private void ensureCapacityHelper(int minCapacity) {
            // overflow-conscious code
            if (minCapacity - elementData.length > 0)
                grow(minCapacity);
        }
        2.3 如果需要的数组大小不够用 就扩容,扩容的算法
        //就是扩容两倍
        // int newCapacity = oldCapacity + ((capacityIncrement > 0) ?capacityIncrement : oldCapacity);
        private void grow(int minCapacity) {
            // overflow-conscious code
            int oldCapacity = elementData.length;
            int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                             capacityIncrement : oldCapacity);
            if (newCapacity - minCapacity < 0)
                newCapacity = minCapacity;
            if (newCapacity - MAX_ARRAY_SIZE > 0)
                newCapacity = hugeCapacity(minCapacity);
            elementData = Arrays.copyOf(elementData, newCapacity);
        }
         */
    }
}

Vector扩容底层源码剖析 详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值