首页 > 其他分享 >Vector 容器类

Vector 容器类

时间:2023-01-14 18:22:05浏览次数:36  
标签:容器 capacityIncrement capacity Vector int elementData minCapacity

Vector 底层是用数组实现的,相关的方法都加了同步检查,因此“线程安全,效率低”。比如,indexOf 方法就增加了 synchronized 同步标记。

Vector 的使用

Vector 的使用与 ArrayList 是相同的,因为他们都实现了 List 接口,对 List 接口中的抽象方法做了具体实现。

public class VectorTest {
    public static void main(String[] args) {
        //实例化 Vector
        List < String > v = new Vector < > ();
        v.add("a");
        v.add("b");
        v.add("a");
        for (int i = 0; i < v.size(); i++) {
            System.out.println(v.get(i));
        }
        System.out.println("----------------------");
        for (String str: v) {
            System.out.println(str);
        }
    }
}

Vector 和 ArrayList 的区别

Vector线程安全,效率低;ArrayList线程不安全,效率高

Vector 初始化对象数组长度为10,ArrayList初始化对象数组长度为0

/**
 * The array buffer into which the components of the vector are
 * stored. The capacity of the vector is the length of this array buffer,
 * and is at least large enough to contain all the vector's elements.
 *
 * <p>Any array elements following the last element in the Vector are null.
 *
 * @serial
 */
protected Object[] elementData;
public Vector() {
    this(10);
}
/**
 * Constructs an empty vector with the specified initial capacity and
 * capacity increment.
 *
 * @param initialCapacity the initial capacity of the vector
 * @param capacityIncrement the amount by which the capacity is
 * increased when the vector overflows
 * @throws IllegalArgumentException if the specified initial capacity
 * is negative
 */
public Vector(int initialCapacity, int capacityIncrement) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: " +
            initialCapacity);
    this.elementData = new Object[initialCapacity];
    this.capacityIncrement = capacityIncrement;
}

Vector 扩容为2倍,ArrayList扩容为1.5倍

/**
 * This implements the unsynchronized semantics of ensureCapacity.
 * Synchronized methods in this class can internally call this
 * method for ensuring capacity without incurring the cost of an
 * extra synchronization.
 *
 * @see #ensureCapacity(int)
 */
private void ensureCapacityHelper(int minCapacity) {
    // overflow-conscious code
    //判断是否需要扩容,数组中的元素个数-数组长度,如果大于 0 表明需要扩容
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}
private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    //扩容 2 倍
    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);
}

标签:容器,capacityIncrement,capacity,Vector,int,elementData,minCapacity
From: https://www.cnblogs.com/nylgwn/p/17052326.html

相关文章

  • 获取kubelet管理的容器
    k8s1.15pkg/kubelet/kuberuntime/kuberuntime_container.gogetKubeletContainers方法获取kubelet管理的所有业务容器(true表示包括退出的和死亡的容器,用于GC)补充代码kub......
  • 制作容器镜像的最佳实践
    概述这篇文章主要是我日常工作中的制作镜像的实践,同时结合我学习到的关于镜像制作的相关文章总结出来的.包括通用的容器最佳实践,java,nginx,python容器最佳实践.......
  • Alan的Docker容器学习笔记
    (本文的内容主要来源于Google、百科和学过的一些专栏,目前没有实际的企业级应用容器化部署经验,写的比较浅薄见笑了)为什么会接触到Docker运维同学使用k8s将业务迁移上云时遇到......
  • 49-Docker-网络管理及Compose单机多容器编排
    Docker安装后默认的网络设置Docker服务安装完成之后,默认在每个宿主机会生成一个名称为docker0的网卡其IP地址都是172.17.0.1/16[root@ubuntu2204~]#ipa1:lo:<LOOPBACK,U......
  • C++ STL容器的Value语义与Reference语义
    C++STL容器的Value语义与Reference语义1.Value语义vs.Reference语义1.1两种语义简述​ 通常情况下,所有容器都是建立元素的copy,返回的元素的copy。因此,容器内的元素与......
  • 使用原子主机、Ansible 和 Cockpit 部署容器
    来自原子项目的原子主机是一个轻量级容器操作系统,可以以Docker格式运行 ​​Linux 容器。它专门为提高效率而定制,使其成为用于云环境的Docker运行时系统的理想选择。......
  • 009排障容器
    一、背景好多业务容器做了裁剪,没法进行基本的调试,所以需要启动一个单独的集成很多排错工具的镜像二、现有方案https://hub.docker.com/r/nicolaka/netshoot(1)k8s......
  • kafka(kraft模式)3.*集群容器部署 docker-compose
    一、创建yml文件要修改部分1.修改宿主机ipKAFKA_CFG_ADVERTISED_LISTENERS2.修改挂载路径version:"3.6"services:kafka1:container_name:kafka1image:......
  • docker-compose up 启动容器服务超时错误:ERROR: An HTTP request took too long to co
    问题:    本人正在使用docker运行一个中型的项目,包含40多个微服务及相关数据库的docker。由于docker-composeup同时启动的服务过多,超过了请求HTTP限制的60s时间......
  • 如何利用浮动容器制作悬浮下拉菜单?
    效果展示:前置准备:一个用于点击下拉的菜单按钮四个菜单项图片素材四个菜单项文本素材创建点击执行其他触发器具体步骤:制作悬浮下拉菜单创建打开浮动容器触发器创建关闭浮......