欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?Vector類應(yīng)用場景

 更新時間:2025年07月08日 11:55:12   作者:程序員水自流  
Vector是Java線程安全的動態(tài)數(shù)組,支持動態(tài)擴容與隨機訪問,所有方法加鎖確保并發(fā)安全,但性能較低,現(xiàn)代開發(fā)推薦用CopyOnWriteArrayList或手動同步的ArrayList替代,本文給大家介紹Java?Vector類詳解,感興趣的朋友一起看看吧

Vector 是 Java 中的一個經(jīng)典集合類,位于 java.util 包中。它是一個 動態(tài)數(shù)組,允許存儲任意類型的對象,并支持動態(tài)調(diào)整大小。與 ArrayList 類似,但 Vector 的所有方法都是 線程安全的,適用于多線程環(huán)境。以下是 Vector 類的詳細介紹:

一、Vector的核心特性

1. 動態(tài)數(shù)組

  • Vector 內(nèi)部通過數(shù)組實現(xiàn),支持動態(tài)擴容和縮容。
  • 當元素數(shù)量超過當前數(shù)組容量時,會自動擴容(默認擴容為當前容量的 2 倍)。
  • 支持隨機訪問(通過索引直接獲取元素),實現(xiàn) RandomAccess 接口。

2. 線程安全

  • 所有方法(如 add、get、remove)都通過 synchronized 關(guān)鍵字修飾,確保多線程環(huán)境下的線程安全。
  • 同步鎖粒度:對整個 Vector 對象加鎖,可能導(dǎo)致性能開銷較大。

3. 允許重復(fù)元素和null值

  • ArrayList 一樣,Vector 允許存儲重復(fù)元素和 null 值。

4. 序列化支持

  • 實現(xiàn) Serializable 接口,支持對象序列化,可以通過流進行讀寫。

5. 實現(xiàn)的接口

  • List<E>:提供列表的基本操作(增刪查改)。
  • RandomAccess:支持快速隨機訪問。
  • Cloneable:支持克隆操作。
  • Serializable:支持序列化。

二、Vector的構(gòu)造函數(shù)

構(gòu)造函數(shù)描述
Vector()創(chuàng)建一個空的 Vector,初始容量為 10。
Vector(int initialCapacity)指定初始容量,無容量增量(capacityIncrement 為 0)。
Vector(int initialCapacity, int capacityIncrement)指定初始容量和容量增量。每次擴容時,容量增加 capacityIncrement 的值。若 capacityIncrement <= 0,則擴容為當前容量的 2 倍。
Vector(Collection<? extends E> c)使用指定集合初始化 Vector。

示例代碼

// 默認構(gòu)造函數(shù)
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. 添加元素

  • add(E e):將元素添加到 Vector 末尾。
  • addElement(E obj):與 add 功能相同(Vector 特有的方法)。
  • insertElementAt(E obj, int index):在指定位置插入元素。
Vector<String> vector = new Vector<>();
vector.add("Apple");
vector.addElement("Banana");
vector.insertElementAt("Cherry", 1);
System.out.println(vector); // [Apple, Cherry, Banana]

2. 刪除元素

  • remove(int index):刪除指定位置的元素。
  • remove(Object o):刪除第一次出現(xiàn)的指定元素。
  • removeElement(Object obj):與 remove(Object o) 功能相同。
  • removeAllElements():清空所有元素。
vector.remove(1); // 刪除索引為1的元素
vector.remove("Apple"); // 刪除元素"Apple"
vector.removeAllElements(); // 清空Vector

3. 獲取和修改元素

  • get(int index):獲取指定索引的元素。
  • set(int index, E element):替換指定索引的元素。
  • elementAt(int index):與 get 功能相同(Vector 特有的方法)。
  • setElementAt(E obj, int index):與 set 功能相同。
String fruit = vector.get(0); // 獲取第一個元素
vector.set(1, "Blueberry"); // 替換第二個元素

4. 容量和大小

  • size():返回當前元素數(shù)量。
  • capacity():返回當前數(shù)組的容量。
  • ensureCapacity(int minCapacity):確保容量至少為 minCapacity
  • trimToSize():將數(shù)組容量調(diào)整為當前元素數(shù)量。
System.out.println(vector.size()); // 輸出元素數(shù)量
System.out.println(vector.capacity()); // 輸出當前容量

四、Vector的線程安全機制

1. 同步方法

  • 所有方法通過 synchronized 關(guān)鍵字修飾,確保同一時刻只有一個線程訪問。
  • 示例:
    public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }

2. 優(yōu)點

  • 簡單易用,無需手動同步。
  • 多線程環(huán)境下無需額外加鎖。

3. 缺點

  • 性能開銷:每次方法調(diào)用都需要獲取鎖,高并發(fā)下性能較低。
  • 鎖粒度粗:整個 Vector 被加鎖,即使只操作單個元素,也會阻塞其他線程。

五、Vector的擴容機制

1. 初始容量

  • 默認初始容量為 10(若未指定)。
  • 可通過構(gòu)造函數(shù)自定義初始容量。

2. 擴容策略

  • 默認擴容:若 capacityIncrement <= 0,容量翻倍(newCapacity = oldCapacity * 2)。
  • 指定擴容增量:容量增加 capacityIncrementnewCapacity = oldCapacity + capacityIncrement)。

示例

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 倍
適用場景多線程環(huán)境單線程或需手動同步的場景
替代方案CopyOnWriteArrayList、Collections.synchronizedList

七、Vector的使用注意事項

1. 快速失敗的迭代器

  • 使用 Iterator 遍歷時,如果在迭代過程中修改 Vector(如 add、remove),會拋出 ConcurrentModificationException。
  • 解決方案:使用 Enumeration 或在遍歷時對 Vector 加鎖。
// 快速失敗示例
Vector<String> vector = new Vector<>(Arrays.asList("A", "B", "C"));
for (String s : vector) {
    if (s.equals("B")) {
        vector.remove(s); // 拋出 ConcurrentModificationException
    }
}

2. 內(nèi)存開銷

  • 擴容可能導(dǎo)致內(nèi)存浪費(如頻繁擴容時)。
  • 建議根據(jù)業(yè)務(wù)需求合理設(shè)置初始容量和容量增量。

八、Vector的應(yīng)用場景

1. 推薦使用場景

  • 小規(guī)模多線程環(huán)境(如連接池、緩存)。
  • 需要簡單線程安全的集合,且性能要求不高。

2. 替代方案

  • 高并發(fā)場景:使用 CopyOnWriteArrayList(寫時復(fù)制,讀性能高)。
  • 單線程場景:使用 ArrayList(性能更高)。
  • 需要手動同步:使用 Collections.synchronizedList(new ArrayList<>())。

九、Vector示例代碼

import java.util.Vector;
public class VectorExample {
    public static void main(String[] args) {
        // 創(chuàng)建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");
        // 輸出結(jié)果
        System.out.println("修改后的Vector: " + vector);
    }
}

十、總結(jié)

Vector 是 Java 早期提供的線程安全動態(tài)數(shù)組,盡管其同步機制簡化了多線程開發(fā),但性能開銷較大?,F(xiàn)代 Java 開發(fā)中,推薦使用更高效的線程安全集合類(如CopyOnWriteArrayList)或非線程安全的 ArrayList 并手動同步。理解 Vector 的特性、擴容策略和適用場景,有助于在特定需求下合理選擇數(shù)據(jù)結(jié)構(gòu)。

到此這篇關(guān)于【Java第85集】java Vector類詳解的文章就介紹到這了,更多相關(guān)java Vector類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實現(xiàn)HttpGet請求傳body參數(shù)

    Java實現(xiàn)HttpGet請求傳body參數(shù)

    這篇文章主要為大家詳細介紹了Java實現(xiàn)HttpGet請求傳body參數(shù)的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • Java局部內(nèi)部類原理與用法實例分析

    Java局部內(nèi)部類原理與用法實例分析

    這篇文章主要介紹了Java局部內(nèi)部類原理與用法,結(jié)合實例形式分析了Java局部內(nèi)部類功能、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Java框架解說之BIO NIO AIO不同IO模型演進之路

    Java框架解說之BIO NIO AIO不同IO模型演進之路

    網(wǎng)上很多IO資料,對新手來說,越看越暈。根據(jù)自己的理解,總結(jié)對比了一下BIO、NIO、AIO,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • MyBatis項目的創(chuàng)建和增刪查改操作詳解

    MyBatis項目的創(chuàng)建和增刪查改操作詳解

    這篇文章主要介紹了MyBatis項目的創(chuàng)建和增刪查改操作,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-11-11
  • Java并發(fā)編程中的ConcurrentLinkedQueue詳解

    Java并發(fā)編程中的ConcurrentLinkedQueue詳解

    這篇文章主要介紹了Java并發(fā)編程中的ConcurrentLinkedQueue詳解,GetThread線程不會因為ConcurrentLinkedQueue隊列為空而等待,而是直接返回null,所以當實現(xiàn)隊列不空時,等待時,則需要用戶自己實現(xiàn)等待邏輯,需要的朋友可以參考下
    2023-12-12
  • mybatisPlus填坑之邏輯刪除的實現(xiàn)

    mybatisPlus填坑之邏輯刪除的實現(xiàn)

    本文主要介紹了mybatisPlus填坑之邏輯刪除的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java注解之Retention、Documented、Inherited介紹

    Java注解之Retention、Documented、Inherited介紹

    這篇文章主要介紹了Java注解之Retention、Documented、Inherited注解介紹,本文內(nèi)容和相關(guān)文章是系列文章,需要的朋友可以參考下
    2014-09-09
  • Mybatis分頁插件PageHelper的配置和簡單使用方法(推薦)

    Mybatis分頁插件PageHelper的配置和簡單使用方法(推薦)

    在使用Java Spring開發(fā)的時候,Mybatis算是對數(shù)據(jù)庫操作的利器了。這篇文章主要介紹了Mybatis分頁插件PageHelper的配置和使用方法,需要的朋友可以參考下
    2017-12-12
  • Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例

    Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例

    這篇文章主要介紹了Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例,分為在Spring中DOA與JDBC以及與Hibernate的配合使用兩種情況來進行演示,需要的朋友可以參考下
    2016-03-03
  • JVM調(diào)試命令與調(diào)試工具詳解

    JVM調(diào)試命令與調(diào)試工具詳解

    JVM statistics Monitoring,用于監(jiān)視虛擬機運行時狀態(tài)信息的命令,它可以顯示出虛擬機進程中的類裝載、內(nèi)存、垃圾收集、JIT編譯等運行數(shù)據(jù),這篇文章主要介紹了JVM調(diào)試命令與調(diào)試工具,需要的朋友可以參考下
    2023-10-10

最新評論