一、概述
- · 繼承collection接口
- · 無序(不記錄添加順序)、不允許元素重復、只允許存在一個null元素
二、實現類
1. HashSet
- · 底層其實是包裝了一個HashMap實現的
- · 采用HashCode算法來存取集合中的元素,具有比較好的讀取和查找性能
- · 通過equals和HashCode來判斷兩個元素是否相等
- · 非線程安全
2. LinkedHashSet
- · 繼承HashSet,本質是LinkedHashMap實現
- · 有序的,根據HashCode的值來決定元素的存儲位置,同時使用一個鏈表來維護元素的插入順序
- · 非線程安全
3. TreeSet
- · 是一種排序的Set集合,實現了SortedSet接口,底層是用TreeMap實現的,本質上是一個紅黑樹原理
- · 相對HashSet來說,TreeSet提供了一些額外的按排序位置訪問元素的方法,例如first(), last(), lower(), higher(), subSet(), headSet(), tailSet().
- · 排序分兩種:自然排序(存儲元素實現Comparable接口)和定制排序(創建TreeSet時,傳遞一個自己實現的Comparator對象)
4. EnumSet
- · 集合元素必須是枚舉類型,否則會拋出異常
- · EnumSet集合也是有序的,其順序就是Enum類內元素定義的順序
- · EnumSet存取的速度非常快,批量操作的速度也很快
三、遍歷Set的兩種方法
1. iterator迭代遍歷:
Set<String> set = new HashSet<String>(); Iterator<String> it = set.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); }
2. foreach循環遍歷:
for (String str : set) {
System.out.println(str);
}