java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java vector类

Java Vector类应用场景

作者:程序员水自流

Vector是Java线程安全的动态数组,支持动态扩容与随机访问,所有方法加锁确保并发安全,但性能较低,现代开发推荐用CopyOnWriteArrayList或手动同步的ArrayList替代,本文给大家介绍Java Vector类详解,感兴趣的朋友一起看看吧

Vector 是 Java 中的一个经典集合类,位于 java.util 包中。它是一个 动态数组,允许存储任意类型的对象,并支持动态调整大小。与 ArrayList 类似,但 Vector 的所有方法都是 线程安全的,适用于多线程环境。以下是 Vector 类的详细介绍:

一、Vector的核心特性

1. 动态数组

2. 线程安全

3. 允许重复元素和null值

4. 序列化支持

5. 实现的接口

二、Vector的构造函数

构造函数描述
Vector()创建一个空的 Vector,初始容量为 10
Vector(int initialCapacity)指定初始容量,无容量增量(capacityIncrement 为 0)。
Vector(int initialCapacity, int capacityIncrement)指定初始容量和容量增量。每次扩容时,容量增加 capacityIncrement 的值。若 capacityIncrement <= 0,则扩容为当前容量的 2 倍。
Vector(Collection<? extends E> c)使用指定集合初始化 Vector

示例代码

// 默认构造函数
Vector<String> vector1 = new Vector<>();
// 指定初始容量
Vector<String> vector2 = new Vector<>(20);
// 指定初始容量和容量增量
Vector<String> vector3 = new Vector<>(10, 5);
// 从集合初始化
Vector<String> vector4 = new Vector<>(Arrays.asList("A", "B", "C"));

三、Vector的常用方法

1. 添加元素

Vector<String> vector = new Vector<>();
vector.add("Apple");
vector.addElement("Banana");
vector.insertElementAt("Cherry", 1);
System.out.println(vector); // [Apple, Cherry, Banana]

2. 删除元素

vector.remove(1); // 删除索引为1的元素
vector.remove("Apple"); // 删除元素"Apple"
vector.removeAllElements(); // 清空Vector

3. 获取和修改元素

String fruit = vector.get(0); // 获取第一个元素
vector.set(1, "Blueberry"); // 替换第二个元素

4. 容量和大小

System.out.println(vector.size()); // 输出元素数量
System.out.println(vector.capacity()); // 输出当前容量

四、Vector的线程安全机制

1. 同步方法

2. 优点

3. 缺点

五、Vector的扩容机制

1. 初始容量

2. 扩容策略

示例

Vector<Integer> vector = new Vector<>(5, 3); // 初始容量5,增量3
for (int i = 0; i < 10; i++) {
    vector.add(i);
}
System.out.println(vector.capacity()); // 输出 11(5 → 5+3=8 → 8+3=11)

六、Vector与ArrayList的对比

特性VectorArrayList
线程安全✅ 是(方法级同步)❌ 否
性能较低(同步锁开销)
扩容策略默认扩容为 2 倍扩容为 1.5 倍
适用场景多线程环境单线程或需手动同步的场景
替代方案CopyOnWriteArrayListCollections.synchronizedList

七、Vector的使用注意事项

1. 快速失败的迭代器

// 快速失败示例
Vector<String> vector = new Vector<>(Arrays.asList("A", "B", "C"));
for (String s : vector) {
    if (s.equals("B")) {
        vector.remove(s); // 抛出 ConcurrentModificationException
    }
}

2. 内存开销

八、Vector的应用场景

1. 推荐使用场景

2. 替代方案

九、Vector示例代码

import java.util.Vector;
public class VectorExample {
    public static void main(String[] args) {
        // 创建Vector
        Vector<String> vector = new Vector<>(5, 2); // 初始容量5,增量2
        // 添加元素
        vector.add("Apple");
        vector.add("Banana");
        vector.insertElementAt("Cherry", 1);
        // 遍历Vector
        System.out.println("Vector元素: " + vector);
        for (String fruit : vector) {
            System.out.println(fruit);
        }
        // 修改元素
        vector.set(1, "Blueberry");
        // 删除元素
        vector.remove("Apple");
        // 输出结果
        System.out.println("修改后的Vector: " + vector);
    }
}

十、总结

Vector 是 Java 早期提供的线程安全动态数组,尽管其同步机制简化了多线程开发,但性能开销较大。现代 Java 开发中,推荐使用更高效的线程安全集合类(如CopyOnWriteArrayList)或非线程安全的 ArrayList 并手动同步。理解 Vector 的特性、扩容策略和适用场景,有助于在特定需求下合理选择数据结构。

到此这篇关于【Java第85集】java Vector类详解的文章就介绍到这了,更多相关java Vector类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文