Fork me on GitHub

Vector与ArrayList

Vector的实现
  • 与ArrayList的实现类似,但是使用了synchronized进行同步。 ArrayList的实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
    }

    public synchronized E get(int index) {
    if (index >= elementCount)
    throw new ArrayIndexOutOfBoundsException(index);

    return elementData(index);
    }
  • 与ArrayList的比较

    • Vector是同步的,因此开销就比ArrayList要大,访问速度更慢。最好使用ArrayList,因为同步操作完全可以由程序员自己控制。
    • Vector每次扩容请求其大小的2倍空间,而ArrayList是1.5倍。
      在这里插入图片描述
  • 替代方案

    • 可以使用 Collections.synchronizedList();得到一i个线程安全的ArrayList

      1
      2
      List<String> list = new ArrayList<>();
      List<String> synList = Collections.synchronizedList(list);
    • 也可以使用concurrent并发包下的CopyOnWriteArrayList类

      1
      List<String> list = new CopyOnWriteArrayList<>();
-------------本文结束感谢您的阅读-------------