`
liuzhaomin
  • 浏览: 204285 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Vector线程安全的ArrayList

 
阅读更多

 

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    /**
     * The array buffer into which the components of the vector are
     * stored. The capacity of the vector is the length of this array buffer,
     * and is at least large enough to contain all the vector's elements.
     *
     * <p>Any array elements following the last element in the Vector are null.
     *
     * @serial
     */
    protected Object[] elementData;

    /**
     * The number of valid components in this {@code Vector} object.
     * Components {@code elementData[0]} through
     * {@code elementData[elementCount-1]} are the actual items.
     *
     * @serial
     */
    protected int elementCount;

    /**
     * The amount by which the capacity of the vector is automatically
     * incremented when its size becomes greater than its capacity.  If
     * the capacity increment is less than or equal to zero, the capacity
     * of the vector is doubled each time it needs to grow.
     *
     * @serial
     */
    protected int capacityIncrement;

 

/**
     * Removes the first occurrence of the specified element in this Vector
     * If the Vector does not contain the element, it is unchanged.  More
     * formally, removes the element with the lowest index i such that
     * {@code (o==null ? get(i)==null : o.equals(get(i)))} (if such
     * an element exists).
     *
     * @param o element to be removed from this Vector, if present
     * @return true if the Vector contained the specified element
     * @since 1.2
     */
    public boolean remove(Object o) {
        return removeElement(o);
    }

 

/**
     * Removes the first (lowest-indexed) occurrence of the argument
     * from this vector. If the object is found in this vector, each
     * component in the vector with an index greater or equal to the
     * object's index is shifted downward to have an index one smaller
     * than the value it had previously.
     *
     * <p>This method is identical in functionality to the
     * {@link #remove(Object)} method (which is part of the
     * {@link List} interface).
     *
     * @param   obj   the component to be removed
     * @return  {@code true} if the argument was a component of this
     *          vector; {@code false} otherwise.
     */
    public synchronized boolean removeElement(Object obj) {
	modCount++;
	int i = indexOf(obj);
	if (i >= 0) {
	    removeElementAt(i);
	    return true;
	}
	return false;
    }

 

/**
     * Returns the element at the specified position in this Vector.
     *
     * @param index index of the element to return
     * @return object at the specified index
     * @throws ArrayIndexOutOfBoundsException if the index is out of range
     *            ({@code index < 0 || index >= size()})
     * @since 1.2
     */
    public synchronized E get(int index) {
	if (index >= elementCount)
	    throw new ArrayIndexOutOfBoundsException(index);

	return (E)elementData[index];
    }
 

 

/**
     * Appends the specified element to the end of this Vector.
     *
     * @param e element to be appended to this Vector
     * @return {@code true} (as specified by {@link Collection#add})
     * @since 1.2
     */
    public synchronized boolean add(E e) {
	modCount++;
	ensureCapacityHelper(elementCount + 1);
	elementData[elementCount++] = e;
        return true;
    }

 

/**
     * This implements the unsynchronized semantics of ensureCapacity.
     * Synchronized methods in this class can internally call this
     * method for ensuring capacity without incurring the cost of an
     * extra synchronization.
     *
     * @see #ensureCapacity(int)
     */
    private void ensureCapacityHelper(int minCapacity) {
	int oldCapacity = elementData.length;
	if (minCapacity > oldCapacity) {
	    Object[] oldData = elementData;
	    int newCapacity = (capacityIncrement > 0) ?
		(oldCapacity + capacityIncrement) : (oldCapacity * 2);
    	    if (newCapacity < minCapacity) {
		newCapacity = minCapacity;
	    }
            elementData = Arrays.copyOf(elementData, newCapacity);
	}
    }
分享到:
评论

相关推荐

    Vector 与ArrayList区别

    - **Vector**:是同步的,它的所有公共方法都是线程安全的。这意味着多个线程可以在没有外部同步的情况下安全地访问同一个 `Vector` 对象。 - **ArrayList**:是非同步的,不提供内置的线程安全性。如果多个线程...

    线程安全Vector

    2. **完全线程安全**:类中的所有方法都是线程安全的,可以在多线程环境中自由使用。 3. **有条件线程安全**:部分方法线程安全,部分方法需要外部同步才能保证线程安全。 4. **线程兼容**:需要外部同步才能在多...

    比较Vector、ArrayList和hashtable hashmap

    - Vector 和 ArrayList 都实现了 List 接口,其中 Vector 是线程安全的,而 ArrayList 不是。ArrayList 在插入和查找性能上通常优于 Vector,因为 Vector 的同步操作会带来额外的性能开销。 - LinkedList 实现了 ...

    servlet线程安全问题

    2. 使用线程安全的对象:使用线程安全的对象,如 Vector、Hashtable 等,而不是 ArrayList、HashMap 等。 3. 使用锁机制:使用锁机制,如 synchronized 关键字,可以锁定某个对象,以避免多个线程同时访问同一个对象...

    ArrayList LinkedList Vector区别

    ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...

    Java中ArrayList的使用方法以及与vector的对比

    * ArrayList 是非线程安全的,而 Vector 是线程安全的。 * ArrayList 的性能比 Vector 高,因为 Vector 需要同步锁机制来保证线程安全。 * ArrayList 可以存储 null 值,而 Vector 不能存储 null 值。 ArrayList 是...

    vector定义及与ArrayList的比较

    `Vector`的主要特点是它提供了线程安全(thread-safe)的机制,也就是说,在多线程环境下可以直接使用`Vector`而无需担心数据的一致性和安全性问题。 ### Vector的构造方法 `Vector`类提供了四种构造方法来满足...

    第8讲 对比Vector、ArrayList、LinkedList有何区别1

    这意味着在多线程环境下,它的所有操作都是线程安全的,但这也导致了额外的性能开销。Vector内部通过对象数组存储数据,当数组空间不足时,会自动创建新数组并复制旧数组的所有元素,其扩容策略是每次扩大一倍。由于...

    对比Vector、ArrayList、LinkedList1

    - **线程安全**:Vector是线程安全的,因为它在每个公共方法上都添加了`synchronized`关键字,这意味着在多线程环境中,它的操作是线程安全的,但这也导致了其性能较低。 - **容量管理**:Vector内部使用对象数组...

    ArrayList LinkedList Vector性能测试

    在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...

    ArrayList LinkedList Vector性能对比

    ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们各自有特定的特性和使用场景。这里我们将深入探讨这三个类的性能对比,以及它们在不同操作下的表现。 ArrayList是基于动态数组实现的,它提供了随机...

    ArrayList LinkList和vector的区别

    ArrayList、LinkList和Vector是Java中三个常用的集合类,它们都实现了List接口,但是在实现方式和性能上有所不同。 ArrayList ArrayList是使用数组方式存储数据的,数组元素数大于实际存储的数据,以便增加和插入...

    Arraylist、Hashtable、Vector

    在Java编程语言中,ArrayList、Hashtable和Vector是三种常见的数据结构,它们都用于存储和管理对象,但各有特点和适用场景。以下是对这三个容器的详细解释: ArrayList是Java集合框架中的一部分,它实现了List接口...

    Java集合多线程安全.docx

    1. 使用`Vector`:虽然它是线程安全的,但由于每个操作都进行同步,其性能通常低于非线程安全的集合,因此不推荐在性能要求高的场景中使用。 2. 使用`Collections.synchronizedList`:这个静态方法可以将给定的`...

    Java中Vector与ArrayList的区别详解

    - `Vector`则是线程安全的,它通过在每个可能改变容器结构的操作(如add、remove等)上添加`synchronized`关键字来确保线程安全。这在多线程环境下可以避免数据竞争,但会带来性能开销,因为它强制所有修改操作按...

    ArrayList Vector LinkedList 区别与用法.

    - **Vector** 是线程安全的,它的所有公共方法都被`synchronized`修饰,这意味着在多线程环境中,对Vector的操作不会导致数据不一致的问题。 - **ArrayList** 不具备线程安全性,如果在多线程环境下使用,需要外部...

    java集合-Vector的使用

    但需要注意的是,Vector是线程安全的,在多线程环境下可以进行并发操作。如果不需要线程安全性,并且希望更高的性能,可以使用ArrayList。 需要注意的是,从Java 1.2开始,推荐使用ArrayList代替Vector,因为...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    - **线程安全性**:`Vector`和`HashTable`是线程安全的,而`ArrayList`和`HashMap`不是。在多线程环境下,`ArrayList`和`HashMap`需要通过同步机制来保证数据一致性。 - **存储方式**:`List`接口的实现(如`...

    Java中ArrayList和Vector的区别共2页.p

    在Java编程语言中,ArrayList和Vector是两种常用的动态数组实现,它们都属于集合框架的一部分,用于存储和操作对象。虽然它们在用途上相似,但在性能、线程安全性和同步机制等方面存在显著区别。以下是关于ArrayList...

    Java的线程安全与不安全集合.docx

    1. 使用`Vector`: 虽然`Vector`是线程安全的,但由于其全局锁定策略,效率较低,不推荐在高并发场景下使用。 2. 使用`Collections.synchronizedList(new ArrayList)`: 这种方法通过装饰器模式,将传入的`ArrayList`...

Global site tag (gtag.js) - Google Analytics