一、什么是Set集合?
Set是Collection接口下的一个接口,Set是无序散列集合,元素不允许重复,Set的实现类有HashSet,LinkedHashSet和TreeSet。HashSet使用HashMap实现存储,LinkedHashSet使用LinkedHashMap实现存储,TreeSet使用TreeMap实现存储。
二、Set集合的常用实现类
HashSet是Set接口的主要实现类,无序,新增顺序和获取顺序不一定一致,HashSet的底层是HashMap,线程不安全,可以存储null值。
LinkedHashSet是HashSet的子类,有序,能够按照添加的顺序遍历,数据结构是由链表和哈希表构成;
TreeSet底层使用红黑树,能够按照添加元素的顺序进行遍历,并且可以自动排序:实现Comparable接口和Comparator接口。
三、Set集合如何检查重复?
当对象加入Set时,会先计算对象的hashCode值来判断对象加入的位置,如果该位置没有元素,代表不重复;
如果该位置存在其他元素,会比较该位置链表内的其他元素的hashCode值,如果没有相同的hashCode,代表不重复;
如果发现相同的hashCode,会继续调用equals()方法来检查是否真的相同,如果equals()方法比较结果相同,代表重复,否则代表不重复。
四、举例说明
public class Test01{
public static void main(String[] args) {
// 创建Set集合对象
Set<String> set = new HashSet<>();
// 添加元素
set.add("张三");
set.add("李四");
set.add("王五");
set.add("张三");
// 打印输出
System.out.println(set);
}
}