记一次Vector源码的阅读

                                   至此;答应自己的事就一定要做到

 

今天看了下Vector的代码实现;以前看面试题或者论坛之类;就会经常看到一下ArrayList,LinkedList,Vectoe之间的比较,但是我个人在现在都感觉Vector使用的好少,但是今天还是看了下代码.

 

这里就可以看清楚的看出类之间的关系;

 

参数部分 : 

// 存储数据的数组
protected Object[] elementData;

//  集合的大小 (可以这么理解)

protected int elementCount;
protected int capacityIncrement;

// 最大的长度 Integer.MAX_VALUE - 8

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

 

构成部分

// 无参
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];
    this.capacityIncrement = capacityIncrement;
}

 这里不难看出:最后走到了二个参数的构造里面.

对initialCapacity 进行是否小于0的判断;

如果不是小于0;测给elementData 声明为 initialCapacity 大

 

add,get等部分

关于 add ; get中掉用的方法;可以参考下 https://blog.csdn.net/by_yangge/article/details/100178699 

大致的思想什么还是差不多的

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}
public synchronized E set(int index, E element) {
    if (index >= elementCount)
        throw new ArrayIndexOutOfBoundsException(index);

    E oldValue = elementData(index);
    elementData[index] = element;
    return oldValue;
}
public synchronized E get(int index) {
    if (index >= elementCount)
        throw new ArrayIndexOutOfBoundsException(index);

    return elementData(index);
}
public boolean remove(Object o) {
    return removeElement(o);
}
public synchronized boolean removeElement(Object obj) {
    modCount++;
    int i = indexOf(obj);
    if (i >= 0) {
        removeElementAt(i);
        return true;
    }
    return false;
}

从这里可以不难看出来每个方法都加上了 synchronized ; 这个就是表示同步的意思.在多线程的情况下,每次都只有一个线程可以进这个方法,所以不难看出来Vector 比 ArrayList安全的地方,那就是Vector中的很多地方都是加上了 synchronized 同步。

 存储的数据类型是和ArrayList 是一样的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值