不同介面不同人生
会使用到 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"); }}
比较 10,000 笔资料
Test ArrayList contains method==========================================Done! List Size 10000Total: 14Test HashSet contains method==========================================Done! Map Size 10000Total: 0
比较 100,000 笔资料
Test ArrayList contains method==========================================Done! List Size 100000Total: 17Test HashSet contains method==========================================Done! Map Size 100000Total: 0
比较 1,000,000 笔资料
Test ArrayList contains method==========================================Done! List Size 1000000Total: 19Test HashSet contains method==========================================Done! Map Size 1000000Total: 1
结论
总之,在需要快速判断集合是否包含某个元素时,HashSet 通常比 ArrayList 更具优势,尤其是当元素数量较大时。然而,如果你需要保留元素的顺序或允许重複元素,那么 ArrayList 可能更适合你的需求。