亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java?Vector類(lèi)應(yīng)用場(chǎng)景

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

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

一、Vector的核心特性

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

  • Vector 內(nèi)部通過(guò)數(shù)組實(shí)現(xiàn),支持動(dòng)態(tài)擴(kuò)容和縮容。
  • 當(dāng)元素?cái)?shù)量超過(guò)當(dāng)前數(shù)組容量時(shí),會(huì)自動(dòng)擴(kuò)容(默認(rèn)擴(kuò)容為當(dāng)前容量的 2 倍)。
  • 支持隨機(jī)訪問(wèn)(通過(guò)索引直接獲取元素),實(shí)現(xiàn) RandomAccess 接口。

2. 線程安全

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

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

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

4. 序列化支持

  • 實(shí)現(xiàn) Serializable 接口,支持對(duì)象序列化,可以通過(guò)流進(jìn)行讀寫(xiě)。

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

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

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

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

示例代碼

// 默認(rèn)構(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); // 獲取第一個(gè)元素
vector.set(1, "Blueberry"); // 替換第二個(gè)元素

4. 容量和大小

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

四、Vector的線程安全機(jī)制

1. 同步方法

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

2. 優(yōu)點(diǎn)

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

3. 缺點(diǎn)

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

五、Vector的擴(kuò)容機(jī)制

1. 初始容量

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

2. 擴(kuò)容策略

  • 默認(rèn)擴(kuò)容:若 capacityIncrement <= 0,容量翻倍(newCapacity = oldCapacity * 2)。
  • 指定擴(kuò)容增量:容量增加 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的對(duì)比

特性VectorArrayList
線程安全? 是(方法級(jí)同步)? 否
性能較低(同步鎖開(kāi)銷(xiāo))
擴(kuò)容策略默認(rèn)擴(kuò)容為 2 倍擴(kuò)容為 1.5 倍
適用場(chǎng)景多線程環(huán)境單線程或需手動(dòng)同步的場(chǎng)景
替代方案CopyOnWriteArrayList、Collections.synchronizedList

七、Vector的使用注意事項(xiàng)

1. 快速失敗的迭代器

  • 使用 Iterator 遍歷時(shí),如果在迭代過(guò)程中修改 Vector(如 add、remove),會(huì)拋出 ConcurrentModificationException。
  • 解決方案:使用 Enumeration 或在遍歷時(shí)對(duì) 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)存開(kāi)銷(xiāo)

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

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

1. 推薦使用場(chǎng)景

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

2. 替代方案

  • 高并發(fā)場(chǎng)景:使用 CopyOnWriteArrayList(寫(xiě)時(shí)復(fù)制,讀性能高)。
  • 單線程場(chǎng)景:使用 ArrayList(性能更高)。
  • 需要手動(dòng)同步:使用 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 早期提供的線程安全動(dòng)態(tài)數(shù)組,盡管其同步機(jī)制簡(jiǎn)化了多線程開(kāi)發(fā),但性能開(kāi)銷(xiāo)較大?,F(xiàn)代 Java 開(kāi)發(fā)中,推薦使用更高效的線程安全集合類(lèi)(如CopyOnWriteArrayList)或非線程安全的 ArrayList 并手動(dòng)同步。理解 Vector 的特性、擴(kuò)容策略和適用場(chǎng)景,有助于在特定需求下合理選擇數(shù)據(jù)結(jié)構(gòu)。

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

相關(guān)文章

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

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

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

    Java局部?jī)?nèi)部類(lèi)原理與用法實(shí)例分析

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

    Java框架解說(shuō)之BIO NIO AIO不同IO模型演進(jìn)之路

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

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

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

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

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

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

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

    Java注解之Retention、Documented、Inherited介紹

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

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

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

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

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

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

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

最新評(píng)論