Set接口
- Set接口继承了Collection接口的全部方法,没有提供额外的方法。
- Set集合满足 无序、不重复的特点。
注:这个无序不是说每次遍历Set集合,随机地取出元素。也不是指插入的顺序和遍历得到的顺序不同,而是指Set集合添加元素的方式并不是按数组索引的顺序添加。
HashSet
- HashSet底层使用HashMap实现。
- 添加到HashSet的元素需要重写equals方法和hashcode方法。
LinkedHashSet
- 是HashSet的子类,每个数据节点还维护了两个引用,指示前一个节点和后一个节点。所以遍历LinkedHashSet得到的元素顺序和插入的元素顺序相同。
TreeSet
-
底层使用红黑树实现。
-
插入的数据必须是同类对象。
-
TreeSet会确保集合元素处于排序状态。
-
TreeSet的两种排序方法,自然排序和定制排序。
- 自然排序:元素需要实现Comparable接口,重写compareTo方法。
- 定制排序:使用TreeSet(Comparator<? super E> comparator)传入一个比较器。
-
TreeSet中元素的不重复性并不是根据equals方法来确定的,而是根据compareTo方法或compare方法中定义的属性的比较规则来决定的。例如A类有name和age两个属性,new B(“甲”,20),new c(“乙”,20),如果只比较了age这个属性,那么B和C对象就不算是重复元素,它们都会被加入到TreeSet。