首页 > 编程语言 >手撕Vector底层源码

手撕Vector底层源码

时间:2023-06-21 19:03:15浏览次数:48  
标签:capacityIncrement Vector int minCapacity elementData initialCapacity 源码 底层

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {
    //外部操作数
    protected transient int modCount = 0;
}
public class Vector<E> extends AbstractList<E> implements List<E>{
    //元素容器
    protected Object[] elementData;//new Object[10]{null,null,null,null,...}
    //元素个数
    protected int elementCount;
    //容量增量
    protected int capacityIncrement;//0
    
    public Vector() {
        this(10);
    }
    
    //initialCapacity - 10
    public Vector(int initialCapacity) {
        this(initialCapacity, 0);
    }
    
    //initialCapacity - 10
    //capacityIncrement - 0
    public Vector(int initialCapacity, int capacityIncrement) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
    }
    
    public synchronized boolean add(E e) {//线程安全的
        modCount++;
        ensureCapacityHelper(elementCount + 1);//扩容
        elementData[elementCount++] = e;
        return true;
    }
    
    private void ensureCapacityHelper(int minCapacity) {
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }
    
    private void grow(int minCapacity) {
        // oldCapacity - 10
        int oldCapacity = elementData.length;
        //newCapacity - 10 + 10
        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<String> v = new Vector<>();

v.add("张三");
v.add("李四");
v.add("王五");
  1. Vector底层数据结构是什么?
    Object类型的一维数组
  2. Vector的默认初始化容量是多少?
    10
  3. Vector的扩容机制是什么?
    如果容量增量小于等于0,扩容机制是数组原来长度的两倍
    如果容量增量大于0,扩容机制是数组原来长度+容量增量
  4. Vector的特点是什么?
    Vector是线程安全的集合

标签:capacityIncrement,Vector,int,minCapacity,elementData,initialCapacity,源码,底层
From: https://blog.51cto.com/u_16154651/6530559

相关文章

  • CentOS7 源码编译安装 Python 3.8.10,开启 SSL 功能
    背景CentOS7自带的Python3,或者通过yum安装的Python3,可能会有无法使用ssl的问题:$python3Python3.8.10(default,Jun132023,14:51:15)[GCC11.2.120220127(RedHat11.2.1-9)]onlinuxType"help","copyright","credits"or"license&qu......
  • 直播平台搭建源码,uni中使用轮播图
    直播平台搭建源码,uni中使用轮播图 <swiperclass="swiper"style="height:90rpx;"circularvertical="true"   :autoplay="true":interval="3000":duration="1000"><swiper-itemv-for="(item,index)in......
  • [万神网络科技]Windows12网页版开源HTML源码
    Windows12网页版开源HTML源码源码介绍Windows12网页版是一个开源项目,使用标准网络技术,例如Html、CSS和Javascript,希望让用户在网络上预先体验Windows12因为这只是概念版,所以内容可能与Windows12正式版本不一致。源码截图下载地址:vx公众号:万神的小屋......
  • 租赁小程序成品|租赁小程序源码|人车网租赁功能
    租赁市场一直是人们比较关注的,有时候我们因为工作需要使用数码产品,但是直接购买并不划算,如果可以进行短期的租赁不仅能满足使用需求,还能节省资金,通过租赁小程序系统用户可以更便捷的选择自己想要租用的产品,而且还给商家和用户都提供了安全性和可靠性,那么租赁小程序成品包含哪些功能......
  • Spring源码核心剖析
    前言SpringAOP作为Spring最核心的能力之一,其重要性不言而喻。然后需要知道的是AOP并不只是Spring特有的功能,而是一种思想,一种通用的功能。而SpringAOP只是在AOP的基础上将能力集成到SpringIOC中,使其作为bean的一种,从而我们能够很方便的进行使用。一、SpringAOP的使用方式1.1使......
  • XXL-job开源框架相关的源码流程解析。
    XXL-job框架是一个分布式的定时任务框架。他简单快捷。配置方便。而且用途广泛。所以他的源码非常值得一看。对于我来说。其中其自写的RPC框架。以及处理发布多个定时任务的高并发处理。是我打开微服务的大门。这是一篇xxl-job源码的解析与流程分析。比较偏口语化。在这篇随笔中......
  • SLF4J门面日志框架源码探索
    1SLF4J介绍SLF4J即SimpleLoggingFacadeforJava,它提供了Java中所有日志框架的简单外观或抽象。因此,它使用户能够使用单个依赖项处理任何日志框架,例如:Log4j,Logback和JUL(java.util.logging)。通过在类路径中插入适当的jar文件(绑定),可以在部署时插入所需的日志框架。如果要更......
  • 大功率平衡车,扭扭车 图纸 源码 平衡车原理图 pcb 矢量源码非库函数, Bom清单 物料表等
    大功率平衡车,扭扭车图纸源码平衡车原理图pcb矢量源码非库函数,Bom清单物料表等资料。500W功率STM32主控陀螺仪可用于学习电机开发,平衡车独轮车项目开发。ID:452500609590448918......
  • 六轴桌面机械臂 上位机(PC)源码与下位机(单片机)源码
    六轴桌面机械臂上位机(PC)源码与下位机(单片机)源码YID:1690609972944148......
  • 植保机电调无感电机控制器软硬件方案全套,FOC矢量控制 算法,永磁同步电机驱动用,所有源码
    植保机电调无感电机控制器软硬件方案全套,FOC矢量控制算法,永磁同步电机驱动用,所有源码,含观测器部分,全部开源,植保机风机等大功率使用,可直接打板子使用,稳定性非常好,提供硬件原理图,PCB,BOM,软件源代码ID:935000609416290163......