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

Java Vector 應用實戰:動態陣列操作、參數傳遞與 Applet 畫布整合範例

     編輯:Java 相關知識

java.util.Vector 作為早期動態陣列實作,在參數傳遞、跨組件資料交換、舊版 Applet 開發中扮演重要角色。本文整理 Vector 核心 API、擴容機制、元素操作演示、介面傳遞模式與 Applet 畫布整合完整範例。

Vector 三種建構子與擴容策略

Vector()                                    // 初始容量 10,擴容 2倍
Vector(int initialCapacity)                 // 指定初始容量
Vector(int initialCapacity, int capacityIncrement) // 指定初始容量與擴容增量
Vector(Collection<? extends E> c)           // 從集合初始化

擴容邏輯:capacityIncrement > 0 時按增量擴容;否則雙倍擴容。

核心操作 API 分類

類別方法說明
新增addElement(E obj)尾部新增,size+1
insertElementAt(E obj, int index)指定位置插入,後續元素後移
setElementAt(E obj, int index)指定位置替換
addAll(Collection<? extends E> c)批次新增
刪除removeElement(Object obj)刪除首個匹配
removeElementAt(int index)刪除指定位置
removeAllElements()清空所有元素
clear()清空 (List 介面方法)
查詢elementAt(int index)取得指定位置元素
firstElement() / lastElement()首/尾元素
indexOf(Object obj)首次出現索引
contains(Object obj)是否包含
size() / isEmpty() / capacity()狀態查詢
迭代elements()返回 Enumeration (Vector 獨有)
iterator() / listIterator()標準迭代器

元素操作演示追蹤

Vector v = new Vector();
v.addElement("one");      // [one]
v.addElement("two");      // [one, two]
v.addElement("three");    // [one, two, three]
v.insertElementAt("zero", 0);     // [zero, one, two, three]
v.insertElementAt("oop", 3);      // [zero, one, two, oop, three]
v.setElementAt("three", 3);       // [zero, one, two, three, three]
v.setElementAt("four", 4);        // [zero, one, two, three, four]
v.removeAllElements();            // []

關鍵實戰:介面定義與參數傳遞模式

跨組件/類別傳遞多參數時,定義介面持有 Vector 作為共享容器:

interface CodeSelect {
    Vector codeSelect = new Vector(); // 介面欄位隱含 public static final
}

約定索引語義:

  • Vector[0]:學生編號 (String)
  • Vector[1]:科目索引 (Integer: 0=國文, 1=數學, 2=政治)

完整範例:Applet 面板輸入 → 畫布顯示

輸入面板類 (Panel 子類)

public class CodePanel extends Panel implements CodeSelect {
    TextField idField = new TextField();
    Choice subjectChoice = new Choice();
    
    public void init() {
        subjectChoice.add("國文");
        subjectChoice.add("數學");
        subjectChoice.add("政治");
        add(idField);
        add(subjectChoice);
    }
    
    @Override
    public boolean handleEvent(Event evt) {
        if (evt.id == Event.ACTION_EVENT) {
            if (evt.target instanceof TextField) {
                codeSelect.setElementAt(idField.getText(), 0);
            } else if (evt.target instanceof Choice) {
                codeSelect.setElementAt(new Integer(subjectChoice.getSelectedIndex()), 1);
            }
            return true;
        }
        return super.handleEvent(evt);
    }
}

顯示畫布類 (Canvas 子類)


public class CodeCanvas extends Canvas implements CodeSelect {
    public void paint(Graphics g) {
        String studentId = (String) codeSelect.elementAt(0);
        Integer subjIdx = (Integer) codeSelect.elementAt(1);
        int subject = (subjIdx != null) ? subjIdx.intValue() : -1;
        
        g.drawString("學號: " + studentId, 10, 20);
        switch (subject) {
            case 0: g.drawString("科目: 國文", 10, 40); break;
            case 1: g.drawString("科目: 數學", 10, 40); break;
            case 2: g.drawString("科目: 政治", 10, 40); break;
            default: g.drawString("科目: 未選擇", 10, 40);
        }
    }
}

主 Applet 整合


public class VectorDemoApplet extends Applet {
    CodePanel panel = new CodePanel();
    CodeCanvas canvas = new CodeCanvas();
    
    public void init() {
        setLayout(new BorderLayout());
        add("North", panel);
        add("Center", canvas);
    }
}

現代化改良建議

  1. 替代 Vector:新代碼使用 ArrayList<T> + Collections.synchronizedList() 或 CopyOnWriteArrayList
  2. 介面傳遞改用 DTO:定義 StudentQueryParams 類別,編譯期類型安全、IDE 重構友善
  3. Applet 棄用:瀏覽器已移除 Java 外掛支援,改用 Spring Boot + Thymeleaf/React/Vue 前後端分離
  4. 事件模型升級:AWT 1.0 handleEvent → AWT 1.1+ ActionListener / JavaFX 事件處理
  5. 泛型化:Vector<Object> 明確元素類型,減少轉型

Vector 仍具價值的場景

  • 維護 JDK 1.1/1.2 時代遺留系統
  • 需 Enumeration 介面相容的舊 API 整合
  • 簡單腳本/教學示範動態陣列基本原理
  • 特定第三方庫強制要求 Vector 參數

理解 Vector 歷史定位與 API 細節,有助於閱讀舊代碼、平滑遷移至現代集合框架,並掌握動態陣列、參數傳遞、組件解耦等核心程式設計概念。

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