详解Java中的Vector

作者:阿克西斯教成员污米饭 时间:2023-06-05 01:40:49 

Vector实现了AbstractList抽象类和List接口,和ArrayList一样是基于Array存储的

Vector 是线程安全的,在大多数方法上存在synchronized关键字


//Vector存放的元素,初始化默认长度为10
protected Object[] elementData;
//元素个数
protected int elementCount;
//每次扩容大小,默认为0
protected int capacityIncrement;
//构造函数,无指定初始化大小和无扩容大小
public Vector() {
 this(10);
}
//构造函数,指定初始化大小和无扩容大小
public Vector(int initialCapacity) {
 this(initialCapacity, 0);
}
//构造函数,指定初始化大小和扩容大小
public Vector(int initialCapacity, int capacityIncrement) {
 super();
 if (initialCapacity < 0)
   throw new IllegalArgumentException("Illegal Capacity: "+
                     initialCapacity);
 this.elementData = new Object[initialCapacity];
 this.capacityIncrement = capacityIncrement;
}
//构造函数,Collection集合
public Vector(Collection<? extends E> c) {
 elementData = c.toArray();
 elementCount = elementData.length;
 if (elementData.getClass() != Object[].class)
   elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
 }
//确保扩容的最小容量
public synchronized void ensureCapacity(int minCapacity) {
 if (minCapacity > 0) {
   modCount++;
   ensureCapacityHelper(minCapacity);
 }
}
private void ensureCapacityHelper(int minCapacity) {
 // overflow-conscious code
 if (minCapacity - elementData.length > 0)
   grow(minCapacity);
}
//扩容
private void grow(int minCapacity) {
 int oldCapacity = elementData.length;
 //当扩容大小为0的时候,扩容为原来的2倍
 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);
}
private static int hugeCapacity(int minCapacity) {
 if (minCapacity < 0) // overflow
   throw new OutOfMemoryError();
 return (minCapacity > MAX_ARRAY_SIZE) ?
   Integer.MAX_VALUE :
   MAX_ARRAY_SIZE;
}
  • ensureCapacity(int minCapacity)方法确保Vector的最小长度,当扩容2倍小于minCapacity时,扩容到minCapacity大小,minCapacity不能小于0

  • 最大长度为2的31次方-1

设置大小


public synchronized void setSize(int newSize) {
 modCount++;
 if (newSize > elementCount) {
   ensureCapacityHelper(newSize);
 } else {
   for (int i = newSize ; i < elementCount ; i++) {
     elementData[i] = null;
   }
 }
 elementCount = newSize;
}

超过大小的被设置为Null


public synchronized void copyInto(Object[] anArray) {
 System.arraycopy(elementData, 0, anArray, 0, elementCount);
}
public synchronized void trimToSize() {
 modCount++;
 int oldCapacity = elementData.length;
 if (elementCount < oldCapacity) {
   elementData = Arrays.copyOf(elementData, elementCount);
 }
}
public synchronized int indexOf(Object o, int index) {
 if (o == null) {
   for (int i = index ; i < elementCount ; i++)
     if (elementData[i]==null)
       return i;
 } else {
   for (int i = index ; i < elementCount ; i++)
     if (o.equals(elementData[i]))
       return i;
 }
 return -1;
}

是否为空


public synchronized boolean isEmpty() {
 return elementCount == 0;
}

设置索引上的元素


public synchronized void setElementAt(E obj, int index) {
 if (index >= elementCount) {
   throw new ArrayIndexOutOfBoundsException(index + " >= " +
                        elementCount);
 }
 elementData[index] = obj;
}

添加元素


public synchronized void addElement(E obj) {
 modCount++;
 ensureCapacityHelper(elementCount + 1);
 elementData[elementCount++] = obj;
}

扩容

插入元素


public synchronized void insertElementAt(E obj, int index) {
 modCount++;
 if (index > elementCount) {
   throw new ArrayIndexOutOfBoundsException(index
                        + " > " + elementCount);
 }
 ensureCapacityHelper(elementCount + 1);
 System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
 elementData[index] = obj;
 elementCount++;
}
  • 扩容

  • 数组拷贝向索引后移动

  • 删除为向前移动


删除元素


public synchronized boolean removeElement(Object obj) {
 modCount++;
 int i = indexOf(obj);
 if (i >= 0) {
   removeElementAt(i);
   return true;
 }
 return false;
}

只能删除第一个

-我是签名----------------------------
这里只是一个签名

详解

以上所述是小编给大家介绍的Java中的Vector网站的支持!

来源:http://www.cnblogs.com/imeng/archive/2017/10/18/7687091.html

标签:java,vector
0
投稿

猜你喜欢

  • Struts2中接收表单数据的三种驱动方式

    2022-04-21 09:23:11
  • java发送http请求并获取状态码的简单实例

    2023-12-06 00:59:14
  • SSM框架搭建图文教程(推荐)

    2023-11-10 20:39:07
  • Java异常处理中同时有finally和return语句的执行问题

    2022-08-14 15:28:30
  • Java Fluent Mybatis 项目工程化与常规操作详解流程篇 上

    2022-08-28 16:47:28
  • java实现socket客户端连接服务端

    2021-12-02 03:52:07
  • C++常见错误中英文对照表

    2023-06-05 04:52:13
  • maven继承父工程统一版本号的实现

    2023-01-27 09:19:49
  • C#获取指定年份第一个星期一具体日期的方法

    2023-03-06 19:18:18
  • WPF PasswordBox进行数据绑定方法

    2022-05-23 03:53:11
  • Android传递Bitmap对象在两个Activity之间

    2023-09-01 22:30:17
  • java中生产者消费者问题和代码案例

    2023-11-24 04:09:07
  • C#简单实现SNMP的方法

    2021-11-25 18:42:38
  • Java函数式编程(六):Optional

    2021-07-04 21:44:05
  • Kotlin自定义View系列教程之标尺控件(选择身高、体重等)的实现

    2022-06-26 00:35:40
  • android选项卡TabHost功能用法详解

    2021-09-24 01:41:27
  • Java中的interrupted()和isInterrupted()

    2023-06-17 22:16:31
  • java常用工具类之DES和Base64加密解密类

    2023-12-20 17:48:31
  • SpringBoot实现二维码扫码登录的原理及项目实践

    2022-02-25 22:31:15
  • C#远程发送和接收数据流生成图片的方法

    2021-08-31 00:30:10
  • asp之家 软件编程 m.aspxhome.com