Set 繼承自 Collection,特徵是不允許重複元素。AbstractSet 實作了大部分介面方法,為具體實作類提供便利。兩大主流實作:
HashMap,元素無序,查詢效能 O(1)。TreeMap,元素有序(自然順序或定制 Comparator),查詢效能 O(log n)。package com.sort;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetTest2 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("a"); set.add("b"); set.add("c"); set.add("d"); set.add("e"); set.add("e"); // 重複自動去除
// 方式一:迭代器
for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
System.out.print(it.next() + " ");
}
System.out.println("\n********************");
// 方式二:增強 for
for (String v : set) System.out.print(v + " ");
}
}
hashCode() 與 equals()HashSet 判斷重複邏輯:先比 hashCode(),不同則直接加入;相同再呼叫 equals(),為 true 視為重複。若未重寫,預設比較記憶體位址,導致邏輯錯誤。請依業務關鍵欄位(如 ID)實作兩方法。