码迷,mamicode.com
首页 > 编程语言 > 详细

Vector(使用数组实现,线程同步)

时间:2019-07-29 00:41:34      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:element   ret   over   越界   nbsp   list集合   集合   ons   syn   

Vector与ArrayList集合一样,内部使用数组实现,不过它是线程同步的,同步的代码:

public Enumeration<E> elements() {
        return new Enumeration<E>() {
            int count = 0;
            public boolean hasMoreElements() {
                return count < elementCount;
            }
            public E nextElement() {
                synchronized (Vector.this) {
                    if (count < elementCount) {
                        return elementData(count++);
                    }
                }
                throw new NoSuchElementException("Vector Enumeration");
            }
        };
    }

 

同一时刻只能有一个线程能够编辑Vector,避免了多线程同时写不会出现我在ArrayList集合中所说的数组越界现象,但是同步需要花费较多的时间,所以增删的速度就慢,通过源码可以发现Vector在容量不够的时候,它默认扩展一倍的容量,扩容源码如下:

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);
    }

 

Vector(使用数组实现,线程同步)

标签:element   ret   over   越界   nbsp   list集合   集合   ons   syn   

原文地址:https://www.cnblogs.com/Mr-RanX/p/11261356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!