Vector的基本介绍
- Vector类的定义说明
>public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
- Vector底层也是一个对象数组,protected Object[] elementData;
- Vector是线程同步的,即线程安全, Vector类的操作方法带有synchronized
synchronizedpublic synchronized E get(int index) {
if (index >= elementCount)
throw new ArraylndexOutOfBoundsException(index);
return elementData(index);
}
- 在开发中,需要线程同步安全时,考虑使用Vector
Vector源码解读
-
如果是无参,默认10满后,就按2倍扩容
-
如果指定大小,则每次直接按2倍扩容.
1、new Vector()底层 public Vector() { this(10); } 2.vector.add(i); 2.1、下面的方法就是添加数据到vector集合 public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; } 2.2、确定是否需要扩容条件:minCapacity - elementData.length > 0 private void ensureCapacityHelper(int minCapacity) { // overflow-conscious code if (minCapacity - elementData.length > 0) grow(minCapacity); } 2.3、如果需要的数组大小不够用,就扩容,扩容的算法 int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); 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); } 有参构造器 Vector vector = new Vector(8); 走的方法: public Vector(int initialCapacity) { this(initialCapacity, 0); }
代码示例
package com.Collection_.List_;
import java.util.Vector;
/**
* @author pengyang
* @date 2022-06-08 19:05
*/
public class Vector_ {
public static void main(String[] args) {
//无参构造器
Vector vector = new Vector();
for (int i = 0; i < 10; i++) {
vector.add(i);
}
vector.add(100);
/*
1、new Vector()底层
public Vector() {
this(10);
}
2.vector.add(i);
2.1、下面的方法就是添加数据到vector集合
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
2.2、确定是否需要扩容条件:minCapacity - elementData.length > 0
private void ensureCapacityHelper(int minCapacity) {
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
2.3、如果需要的数组大小不够用,就扩容,扩容的算法
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
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);
}
有参构造器
Vector vector = new Vector(8);
走的方法:
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
*/
}
}
本文详细介绍了Java中的Vector类,它是一个线程安全的列表实现。Vector通过对象数组存储元素,并在需要时进行扩容。无参构造器默认初始化容量为10,当容量不足时,按照2倍扩容策略增加容量。文章还展示了添加元素的过程,包括扩容算法,并提供了代码示例来演示Vector的使用。
362

被折叠的 条评论
为什么被折叠?



