java. util. Set 接口
Set 接口中的方法和 Collection 中方法一致的。Set 接口取出方式只有一种, 迭代器 。
- HashSet : 底层数据结构是哈希表,线程 是不同步的 。 无序,高效;HashSet 集合保证元素唯一性 :通过元素的 hashCode 方法,和 equals 方法完成的。当元素的 hashCode 值相同时,才继续判断元素的 equals 是否为 true。如果为 true,那么视为相同元素,不存。如果为 false,那么存储。如果 hashCode 值不同,那么不判断 equals,从而提高对象比较的速度。
- LinkedHashSet : 有序,hashset 的子类。
- TreeSet : 对 Set 集合中的元素的进行指定顺序的排序。 不同步 。TreeSet 底层的数据结构就是二叉树。
对于ArrayList 集合,判断元素是否存在,或者删元素的依据都是equals
方法。
对于HashSet 集合,判断元素是否存在,或者删除元素,依据的是 hashCode
方法和 equals
方法。
TreeSet:
用于对 Set 集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。
如果元素不具备比较性,在运行时会抛出ClassCastException
异常。
- 所以元素需要实现
Comparable
接口 ,让元素具备可比较性, 重写compareTo
方法 。依据compareTo
方法的返回值,确定元素在 TreeSet 数据结构中的位置。 - 或者用比较器方式,将
Comparator
对象传递给TreeSet
构造器来告诉树集使用不同的比较方法