一 属性

  1. protected Object[] elementData;
  2. protected int elementCount;
  3. //每次扩容的大小
  4. protected int capacityIncrement;
  5. private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

二 重要方法

  • 使用Synchronized关键字保证线程安全
  • ensureCapacity(int minCapacity)

    • 扩容(每次扩容一个伐值 capacityIncrement)

      三 添加元素

      1. //使用synchronized关键字保证线程安全
      2. public synchronized boolean add(E e) {
      3. modCount++;
      4. ensureCapacityHelper(elementCount + 1);
      5. elementData[elementCount++] = e;
      6. return true;
      7. }

      四 删除元素

      1. public synchronized E remove(int index) {
      2. modCount++;
      3. if (index >= elementCount)
      4. throw new ArrayIndexOutOfBoundsException(index);
      5. E oldValue = elementData(index);
      6. int numMoved = elementCount - index - 1;
      7. if (numMoved > 0)
      8. System.arraycopy(elementData, index+1, elementData, index,
      9. numMoved);
      10. elementData[--elementCount] = null; // Let gc do its work
      11. return oldValue;
      12. }

      五 获取元素

      1. //注意这里获取元素也被加锁了 防止脏读现象
      2. public synchronized E get(int index) {
      3. if (index >= elementCount)
      4. throw new ArrayIndexOutOfBoundsException(index);
      5. return elementData(index);
      6. }

      六 其他

  • Stack 继承Vector

    • push 入栈
    • pop 出栈,线程安全的,实际先调用peek()获取元素,再调用removeElementAt 删除元素
    • peek 返回栈顶元素