J2ME 無完整 Collections Framework,核心集合僅 Hashtable 與 Vector(均為輕量級實現,不支援泛型)。掌握其特性與優化技巧,是高效嵌入式開發的基礎。
size > capacity * 0.75 觸發 rehash() 擴容
// 預估將存入 200 條記錄
Hashtable table = new Hashtable(300); // 容量 > 200/0.75 ≈ 267
預先分配足夠容量,避免運行期多次 rehash() 導致記憶體抖動與 CPU 尖峰。
public Hashtable(int initialCapacity); // 指定初始容量
public Hashtable() { this(11); } // 默認容量 11(質數,利於雜湊分佈)
Hashtable t = new Hashtable();
t.put("key", "value");
Object v = t.get("key");
t.remove("key");
t.clear();
capacity(總是 ≥ size)與 capacityIncrement(擴容步長)ensureCapacity(n) 可減少重複分配| 場景 | 推薦 | 理由 |
|---|---|---|
| 鍵值查找、去重、索引 | Hashtable | O(1) 平均查找 |
| 順序存取、疊代、隨機索引 | Vector | 連續記憶體、快速索引 |
| 極度受限記憶體、固定大小 | 陣列 Type[] | 無額外物件頭、最小開銷 |
| 頻繁增刪頭尾 | Vector | 封裝良好,避免手動複製 |
Enumeration keys = table.keys(); while(keys.hasMoreElements()) { Object k = keys.nextElement(); ... }Object[] arr = new Object[v.size()]; v.copyInto(arr);new Integer(i)),頻繁操作考慮平行陣列或自定義結構體Hashtable 與 Vector 是 J2ME 資料處理的基石。理解「負載因子觸發擴容」、「預設容量避免抖動」、「鏈表 vs 陣列底層差異」,並根據存取模式精準選型,能在 KB 級記憶體中構建高效、穩定的資料結構層。