vector二维数组初始化_Vector特点_JDK源码分析

b0db7636f5b22a22f986b9d631706e98.png

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

5dd773bc19069a3537e7bea086fc2347.png

1、Vector的用法

import java.util.Iterator;
import java.util.Vector;

public class TestVector {
	
	public static void main(String[] args) {
		Vector vector = new Vector();
            System.out.println("集合的容量:" + vector.capacity());
           System.out.println("元素的个数:"+vector.size());
		//添加元素
		vector.add("hello");
		vector.add(1, "world");
		vector.addElement("java");
		System.out.println(vector);		
		//删除元素
//		vector.remove(0);
//		vector.remove("java");
//		vector.removeElement("world");
//		vector.clear();
		
		//获取元素
		System.out.println(vector.get(0));
		//遍历集合
           //建议---节约内存,Iterator对象存在周期短
		System.out.println("------使用Iterator(for)遍历------");
		for(Iterator iterator = vector.iterator();iterator.hasNext();){
			System.out.println(iterator.next());
		}
		System.out.println("------使用Iterator(while)遍历------");
		Iterator ite = vector.iterator();
		while(ite.hasNext()) {
			System.out.println(ite.next());
		}
	}
}

2、JDK源码分析

(1)构造方法

public Vector() {
    this(10);
}
public Vector(int initialCapacity) {
    this(initialCapacity, 0);
}
public Vector(int initialCapacity, int capacityIncrement) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "
                + initialCapacity);
   this.elementData = new Object[initialCapacity];//new Object[10];
   this.capacityIncrement = capacityIncrement;//0
}

(2)容量扩充

private void grow(int minCapacity) {
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity 
        + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity);//20
    if (newCapacity - minCapacity < 0)//健壮性
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)//健壮性
        newCapacity = hugeCapacity(minCapacity);
    elementData = Arrays.copyOf(elementData, newCapacity);
}

3、Vector与ArrayList的区别:

(1) Vector 的 add()方法是同步方法,ArrayList 的 add() 方法是非同步方法

(2) Vector 扩容每次扩充 1 倍 ,ArrayList 每次扩充 0. 5 倍

(3) Vector是在调用构造方法时,直接初始化容量为10,ArrayList 是在第一次调用添加方法时,初始化容量为 10

(4) Vector 的版本是 JDK1.0,ArrayList,JDK1.2 版

(5) Vector 是线程同步的,安全性高,效率低, ArrayList 是线程非同步的,安全性低,效率高

4、如何选用ArrayList、LinkedList、Vector

1. 需要线程安全时,用Vector。

2. 不存在线程安全问题时,并且查找较多用ArrayList(一般使用它)。

3. 不存在线程安全问题时,增加或删除元素较多用LinkedList。

尚学堂百战程序员

百战程序员_IT6000集_影响6000万学习IT的中国人【官网】

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值