一、概述
- · 继承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);
}