首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 容器實戰:ArrayList 與 Vector 核心用法詳解

     編輯:Java 相關知識

前言

ArrayList 與 Vector 是 Java 集合框架中最基礎、使用頻率最高的兩個 List 實作。雖然兩者底層皆為動態陣列,但在 API 設計、執行緒安全性與現代最佳實踐上存在顯著差異。本文通過實戰代碼示範,幫助你快速掌握核心用法並避開常見坑點。

ArrayList 核心 API 與實戰

常用方法速查

  • add(E e) / add(int index, E element):尾部追加 / 指定位置插入
  • get(int index):隨機存取,O(1)
  • set(int index, E element):替換指定位置元素
  • remove(int index) / remove(Object o):刪除
  • indexOf / lastIndexOf:查找首尾位置
  • listIterator():雙向疊代器,支援增刪改查
  • toArray():轉為陣列

代碼範例:基本增刪查改

import java.util.*;

public class ArrayListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        
        // 1. 添加元素
        list.add("福娃0");
        list.add("福娃1");
        list.add("福娃2");
        
        // 2. 指定位置插入
        list.add(1, "後添加的福娃");  // 索引 1 處插入,後續元素右移
        
        // 3. 遍歷輸出(推薦 for-each 或 Iterator)
        System.out.println("=== 迭代器遍歷 ===");
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        
        // 4. 隨機存取
        System.out.println("\n=== 隨機存取 ===");
        System.out.println("索引 2 的元素:" + list.get(2));
        
        // 5. 修改元素
        list.set(0, "新福娃0");
        
        // 6. 轉陣列
        String[] arr = list.toArray(new String[0]);
        System.out.println("\n轉陣列長度:" + arr.length);
    }
}

輸出結果:

=== 迭代器遍歷 ===
新福娃0
後添加的福娃
福娃1
福娃2

=== 隨機存取 ===
索引 2 的元素:福娃1
轉陣列長度:4

Vector 核心 API 與實戰

Vector 特有方法(歷史遺留)

  • addElement(E obj) / insertElementAt(E obj, int index):同 add
  • elementAt(int index):同 get
  • setElementAt(E obj, int index):同 set
  • removeElementAt(int index):同 remove
  • capacity():查看當前陣列容量(非 size)

代碼範例:Vector 基本操作

import java.util.Vector;

public class VectorDemo {
    public static void main(String[] args) {
        Vector<String> v = new Vector<>();
        
        // 添加元素
        v.addElement("福娃0");
        v.addElement("福娃1");
        v.addElement("福娃2");
        
        // 刪除索引 1 的元素
        v.removeElementAt(1);
        
        // 遍歷(傳統 for 迴圈配合 elementAt)
        System.out.println("=== Vector 遍歷 ===");
        for (int i = 0; i < v.size(); i++) {
            System.out.println(i + ": " + v.elementAt(i));
        }
        
        // 查看容量 vs 大小
        System.out.println("\nSize: " + v.size() + ", Capacity: " + v.capacity());
    }
}

輸出結果:

=== Vector 遍歷 ===
0: 福娃0
1: 福娃2

Size: 2, Capacity: 10

關鍵差異與選型指南

維度ArrayListVector
同步機制非同步,效能高方法級 synchronized,效能低
擴容倍數1.5 倍2 倍
API 風格符合 Collections 框架標準保留舊式 Enumeration、elementAt 等
疊代器fail-fastfail-fast(同步塊中需手動同步疊代)
現代替代單執行緒首選用 Collections.synchronizedList 或 CopyOnWriteArrayList

最佳實踐建議

  1. 新專案優先用 ArrayList:除非明確需要方法級同步,否則避免使用 Vector。
  2. 需要執行緒安全時:
    • 讀多寫少 → CopyOnWriteArrayList
    • 寫多讀少、需複合操作原子性 → Collections.synchronizedList(new ArrayList<>()) 並手動同步疊代塊
  3. 預估容量:new ArrayList<>(預估大小) 減少擴容開銷。
  4. 面向介面編程:List<String> list = new ArrayList<>(); 便於後續替換實作。
  5. 避免在多執行緒中並發疊代:若必須疊代,請在 synchronized(list) 塊中進行,或使用並發安全容器。

總結

ArrayList 是現代 Java 開發中 List 的事實標準實作,效能優異、API 乾淨;Vector 因歷史包袱與同步開銷,已淡出主流新建專案。掌握兩者核心 API、擴容機制與同步差異,能幫助你在效能與正確性間做出正確選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved