一、Set集合类思维导图
Set:不允许重复的集合。不会有多个元素引用相同的对象。
二、HashSet、LinkedHashSet及TreeSet区别简述
- HashSet:继承AbstractSet类,实现Set、Cloneable、Serializable接口,非线程安全,无序
public class HashSet<E> extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
- LinkedHashSet:继承HashSet,实现Set、Cloneable、java.io.Serializable接口,非线程安全,有序(顺序)
public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
- TreeSet:继承AbstractSet,实现NavigableSet、Cloneable、java.io.Serializable接口,非线程安全,有序(排序)
public class TreeSet<E> extends AbstractSet<E>
implements NavigableSet<E>, Cloneable, java.io.Serializable
三、详解及示例说明
- HashSet
HashSet底层是基于HashMap实现的,元素是无序的,添加、删除操作复杂度跟HashMap都是o(1)。Map——传送门
部分源码如图。
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
//默认构造函数,实例化一个空的HashMap对象,初始容量16,负载因子0.75
public HashSet() {
map = new HashMap<>();
}
//带参数构造函数
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
public Has