會使用到 contains 的場合,通常是為了找查是否有某個元素存在,但若是在不適當的時機使用不適當的資料結構可能會導致效能相差甚遠,以下分別比較 10,000、100,000、1,000,000 筆元素之間的效能。
public class ContainsMethodComparison {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 請自行替換; i++) {
list.add(i);
}
System.out.println("Test ArrayList contains method");
System.out.println("==========================================");
long start = System.currentTimeMillis();
if (list.contains(list.size() - 1)) {
System.out.println("Done! List Size " + list.size());
} else {
System.out.println("Not Exist!");
}
long end = System.currentTimeMillis();
System.out.println("Total: " + (end - start) + "\n");
Set<Integer> set = new HashSet<>(list);
System.out.println("Test HashSet contains method");
System.out.println("==========================================");
start = System.currentTimeMillis();
if (set.contains(list.size() - 1)) {
System.out.println("Done! Map Size " + set.size());
} else {
System.out.println("Not Exist!");
}
end = System.currentTimeMillis();
System.out.println("Total: " + (end - start) + "\n");
}
}
Test ArrayList contains method
==========================================
Done! List Size 10000
Total: 14
Test HashSet contains method
==========================================
Done! Map Size 10000
Total: 0
Test ArrayList contains method
==========================================
Done! List Size 100000
Total: 17
Test HashSet contains method
==========================================
Done! Map Size 100000
Total: 0
Test ArrayList contains method
==========================================
Done! List Size 1000000
Total: 19
Test HashSet contains method
==========================================
Done! Map Size 1000000
Total: 1
總之,在需要快速判斷集合是否包含某個元素時,HashSet 通常比 ArrayList 更具優勢,尤其是當元素數量較大時。然而,如果你需要保留元素的順序或允許重複元素,那麼 ArrayList 可能更適合你的需求。