概述
Vectory注意事项
-
Vectory的基本介绍
-
Vectory 底层也是一个对象数组,protected Object[] elementData;
-
Vectory 是线程同步的,即线程安全,Vectory类的操作方法带有synchronized
public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; }
-
在开发中,需要线程同步安全时,考虑使用Vector
-
Vectory源码分析
-
Vector和ArrayList的比较:
底层结构 | 版本 | 线程安全(同步)效率 | 扩容倍数 | |
---|---|---|---|---|
ArrayList | 可变数组 | jdk1.2 | 不安全,效率高 | 如果有参构造1.5倍;如果无参构造:第一次10,第二次按照1.5倍扩容 |
Vector | 可变数组 | jdk1.0 | 安全,效率不高 | 如果时无参,默认10,满后,按照2倍扩容;如果指定大小,则每次直接按照2倍扩容 |
import java.util.Vector;
public class VectorSource {
public static void main(String[] args) {
//无参构造
Vector vector = new Vector();
for (int i = 0; i < 10; i++) {
vector.add("WRRY" + i);
}
vector.add(100);
System.out.println(vector);
}
}
/*
1.new Vectory() 底层
public Vector() {
this(10);
}
2.vector.add(100);
2.1
//下面这个方法就添加数据到vector集合
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
2.2
//确定是否需要扩容 条件
if (minCapacity - elementData.length > 0)
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
2.3
//如果 需要数组大小不够用,就扩容,扩容算法
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);
}
*/
最后
以上就是传统冬瓜为你收集整理的Vectory源码解析的全部内容,希望文章能够帮你解决Vectory源码解析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复