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

使用 Hashtable 進行字串陣列去重、差集與過濾實用範例

     編輯:J2EE

為何選 Hashtable?

Hashtable 鍵值唯一、查找 O(1)、線程安全,適合快速過濾重複字串。雖現代多用 HashSet/LinkedHashSet,但 Hashtable 邏輯清晰,適合教學與舊版本相容專案。

案例一:字串陣列去重(保留唯一值)

public String[] distinct(String[] arr) {
    Hashtable ht = new Hashtable<>();
    for (String s : arr) if (!ht.containsKey(s)) ht.put(s, s);
    String[] result = new String[ht.size()];
    int i = 0;
    for (Enumeration e = ht.keys(); e.hasMoreElements(); ) result[i++] = e.nextElement();
    return result;  // 注意:Hashtable 無序,結果順序不固定
}

案例二:求差集(在 A 中但不在 B 中的元素)

public String[] difference(String[] A, String[] B) {
    Hashtable setB = new Hashtable<>();
    for (String s : B) setB.put(s, s);
    Hashtable diff = new Hashtable<>();
    for (String s : A) if (!setB.containsKey(s)) diff.put(s, s);
    String[] result = new String[diff.size()];
    int i = 0;
    for (Enumeration e = diff.keys(); e.hasMoreElements(); ) result[i++] = e.nextElement();
    return result;
}

案例三:移除陣列中指定字串

public String[] remove(String[] arr, String target) {
    Hashtable ht = new Hashtable<>();
    for (String s : arr) if (!s.equals(target)) ht.put(s, s);
    String[] result = new String[ht.size()];
    int i = 0;
    for (Enumeration e = ht.keys(); e.hasMoreElements(); ) result[i++] = e.nextElement();
    return result;
}

改進建議

  • 若需保持原始順序,改用 LinkedHashSet 或手動維護 ArrayList + HashSet。
  • Java 8+ 可用 Stream API 一行解決:Arrays.stream(arr).distinct().toArray(String[]::new)。
  • Hashtable 為同步類別,高併發場景建議改用 ConcurrentHashMap 或無鎖集合。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved