博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vector源码分析
阅读量:7140 次
发布时间:2019-06-28

本文共 1836 字,大约阅读时间需要 6 分钟。

hot3.png

版本说明:jdk1.7.0_79

一、Vector概述

Vector集合已经成为了一个过时的集合,但是还是有必要研究一下,这样才能明白为什么它会被抛弃。

Vector类与ArrayList一样,都是List接口的不同实现,当然它们会有不同的特征,这也是Java多态的表现。

Vector内部是用数组实现的,这个和ArrayList一样。

二、构造器

public class Vector
extends AbstractList
implements List
, RandomAccess, Cloneable, java.io.Serializable{ protected Object[] elementData;//用来存储元素 protected int elementCount;//元素数量 protected int capacityIncrement;//增量。当容器装满时,会自动扩容,扩容大小即为该增量。 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 Vector(int initialCapacity) {        this(initialCapacity, 0);    }    public Vector() {        this(10);    }    public Vector(Collection
c) {        elementData = c.toArray();        elementCount = elementData.length;        // c.toArray might (incorrectly) not return Object[] (see 6260652)        if (elementData.getClass() != Object[].class)            elementData = Arrays.copyOf(elementData, elementCount, Object[].class);    } …… ……}

创建Vector时,可以指定初始容量initalCapacity和增量(用于自动扩容)。如果没有指定初始容量值,则默认初始容量为10。

因为Vector的实现与ArrayList基本上一样的,所以不再赘述,具体细节请参考

三、Vector和ArrayList的比较

1.扩容

Vector在创建时能够指定增量,如果指定了该增量,当自动扩容时增加的容量就是该增量值。如果创建时没指定增量(或该值<=0),则扩容一倍(容量为原来的两倍)

ArrayList并没有提供能指定增量的构造方法,大约扩容到原来的1.5倍(具体参考)

2.线程安全和效率

Vector的很多方法都是线程安全的,然而java.util.concurrent包中对容器提供了线程安全的实现版本,也就是说Vector被淘汰了。非线程安全时,可以用ArrayList来代替Vetor,需要线程安全时可以使用Collections.synchronizedList(new ArrayList())和CopyOnWriteArrayList。所以Vector注定难逃被淘汰的命运。

ArrayList并不是线程安全的,因此相对来说,ArrayList比Vector效率要高一些。

转载于:https://my.oschina.net/javandroid/blog/878240

你可能感兴趣的文章
Kubernetes日志采集与分析的最佳实践 资料下载 ...
查看>>
SpringMVC+Json构建基于Restful风格的应用
查看>>
Fescar - RM InsertExecutor介绍
查看>>
全志 A64开发板设置qt程序自启动
查看>>
记一次使用阿里云图像搜索功能
查看>>
走向人生巅峰?这份自由程序员速成宝典你值得拥有 ...
查看>>
xpath 获取元素及爬虫实例
查看>>
Ubuntu 16.04 装机后的配置要点
查看>>
RxJava入门指南
查看>>
如何判断硬件是否具有嵌入式Linux支持
查看>>
致远慧图孙宇辉:出走英特尔的AI眼科野望
查看>>
docker学习系列14 使用haproxy实现mysql集群的负载均衡
查看>>
开源EDR(OSSEC)基础篇- 02 -部署环境与安装方式
查看>>
使用观察者模式进行短信通知、预警日志记录
查看>>
Expression.Blend.4 Chapter 图片和视频的使用
查看>>
css3条纹边框效果
查看>>
fabric多机多节点部署
查看>>
【NLP】基于统计学习方法角度谈谈CRF(四)
查看>>
Vue-生命周期图示 注解
查看>>
让Python之父愤然退位的PEP572究竟是什么?
查看>>