一、Set集合簡介
Set是Java中Collection接口的子接口,它繼承了Collection的許多方法,但它又比Collection更加嚴格。它不允許存在重複元素,因此也不支持通過索引來訪問元素。常見的Set實現有HashSet、LinkedHashSet和TreeSet。
二、Set遍歷方法
1、普通for循環遍歷
Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); for (int i = 0; i < set.size(); i++) { System.out.print(set.get(i) + " "); }
這種方式雖然能夠遍歷Set集合,但需要先通過轉換為List集合,操作起來較麻煩,同時效率也不高。
2、forEach循環遍歷
Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); for (Integer num : set) { System.out.print(num + " "); }
這種遍歷方式是比較簡單、常用的一種方法,但是其無法保證遍歷順序,因為HashSet或LinkedHashSet是無序的。
3、迭代器遍歷
Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); Iterator<Integer> it = set.iterator(); while (it.hasNext()) { Integer num = it.next(); System.out.print(num + " "); }
這種方式可以遍歷所有類型的集合,其中的remove方法可以安全地刪除元素。
4、Stream流遍歷
Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); set.stream().forEach(num -> System.out.print(num + " "));
這種方式是Java8中的新特性,使用Lambda表達式可以很方便地遍歷Set集合,同時代碼看起來也更加簡潔。
三、提升Set遍歷效率的技巧
1、使用合適的Set實現類
Set有三種常見的實現類:HashSet、LinkedHashSet和TreeSet。其中,HashSet是基於哈希表實現的,可以快速地進行添加、刪除和查找操作;LinkedHashSet繼承自HashSet,在HashSet的基礎上維護了元素的插入順序;TreeSet則是基於紅黑樹實現的,可以按照元素自然順序進行排序。因此,在不同的使用場景中,應該選擇適合的實現類,以達到最優的遍歷效果。
2、增加初始容量和負載因子
Set<Integer> set = new HashSet<>(100, 0.75F); set.add(1); set.add(2); set.add(3); set.stream().forEach(num -> System.out.print(num + " "));
這裡通過構造函數給HashSet設置了初始容量為100,負載因子為0.75F。當集合中的元素個數超過容量 * 負載因子時,集合會自動擴容。因此,設置合理的初始容量和負載因子可以避免頻繁的擴容操作,提高遍歷效率。
3、使用iterator迭代器遍歷
在遍歷Set集合時,使用Iterator迭代器可以避免使用for循環或forEach循環時,由於集合的元素在遍歷時發生了變化而導致的ConcurrentModificationException異常。因此,在遍歷Set集合時,最好使用Iterator迭代器來遍歷。
4、使用中間集合緩存遍歷結果
Set<Integer> set = new HashSet<>(); set.add(1); set.add(2); set.add(3); List<Integer> list = new ArrayList<>(set); for (Integer num : list) { System.out.print(num + " "); }
這種方式在遍歷Set集合時,先將集合元素轉換為一個中間集合(ArrayList),然後再通過對中間集合進行遍歷的方式來遍歷Set集合。這種方式可以顯著提高遍歷速度,但是會消耗額外的內存空間,因此在內存敏感的應用場景中需要慎重使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/290957.html