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

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

猜你喜欢

转载自www.cnblogs.com/Mr-RanX/p/11261356.html