一、Collection接口及其常见实现子类、子接口
1. List接口
2. Set 接口
Set 集合时无序,不可重复的,此处的无序指插入的顺序和遍历得到的顺序不一定相同;Set 最大的功能就是对集合中的元素进行去重,由于Set 继承自 Collection 接口,故也是单列集合,只存储了 key,并且 key 不可重复,不可修改,若要修改,需将原来的 key 删除,再插入。
1)HashSet
底层数据结构: 底层为哈希桶,查询的时间复杂度为O(1)
HashSet 是基于 HashMap (点击进入HashMap 详细讲解)实现的,故可以插入 null 值,并且不是线程安全的。
常用构造方法:
HashSet():创建一个空的 HashSet 对象,初始化加载因子为 0.75,初始容量大小为 16(在第一次 put 时通过 resize 方法设置)
HashSet(Collection<? extends E> c):用于构建包含指定集合的 HashSet 对象,从其他Collection 集合转换为 HashSet;其初始容量为:该 Collection 集合的容量大小除以 0.75 + 1与 默认容量大小即 16 直接的较大值
HashSet(int initialCapacity):创建容量大小为第一个大于等于指定大小的2次幂的 HashSet 对象
其他常用方法:
toArray()方法:将 set 转换为数组;
2)TreeSet
底层数据结构:底层为红黑树,查询的时间复杂度为 O(logn),关于key有序的;
TreeSet 是基于 TreeMap 实现的,故 TreeSet 不能插入 null 值,也是线程不安全的,TreeSet 会将插入的元素按照一定顺序排序;
常用构造方法:
TreeSet():创建一个空的 TreeSet 对象,其初始容量为 16 ,加载因子为 0.75,会对插入进该 TreeSet 中的元素进行自然排序;
TreeSet(Comparator<? super E> comparator):创建一个空的 TreeSet 对象,根据指定的比较器进行排序。例如创建一个降序排序的 TreeSet 对象;
TreeSet<Integer> set = new TreeSet<>(Comparator.reverseOrder());
TreeSet(Collection<? extends E> c):创建包含指定集合的 TreeSet 对象;