Set接口

Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,迭代器算法

  |--HashSet底层数据结构是哈希表,线程是不一样步的无序,高效;数据结构

      HashSet集合保证元素惟一性:经过元素的hashCode方法,和equals方法完成的。函数

      当元素的hashCode值相同时,才继续判断元素的equals是否为true。线程

      若是为true,那么视为相同元素,不存。若是为false,那么存储。对象

      若是hashCode值不一样,那么不判断equals,从而提升对象比较的速度。排序

      |--LinkedHashSet有序,hashset的子类。接口

  |--TreeSet对Set集合中的元素的进行指定顺序的排序。不一样步。TreeSet底层的数据结构就是二叉树。同步

哈希表的原理:hash

1,对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为哈希值io

2,哈希值就是这个元素的位置。

3,若是哈希值出现冲突,再次判断这个关键字对应的对象是否相同。若是对象相同,就不存储,由于元素重复。若是对象不一样,就存储,在原来对象的哈希值基础 +1顺延。

4,存储哈希值的结构,咱们称为哈希表。

5,既然哈希表是根据哈希值存储的,为了提升效率,最好保证对象的关键字是惟一的。

  这样能够尽可能少的判断关键字对应的对象是否相同,提升了哈希表的操做效率。

对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。

对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。

TreeSet:

  用于对Set集合进行元素的指定顺序排序,排序须要依据元素自身具有的比较性。

  若是元素不具有比较性,在运行时会发生ClassCastException异常。

  因此须要元素实现Comparable接口,强制让元素具有比较性,复写compareTo方法

  依据compareTo方法的返回值,肯定元素在TreeSet数据结构中的位置。

  TreeSet方法保证元素惟一性的方式:就是参考比较方法的结果是否为0,若是return 0,视为两个对象重复,不存。

注意:在进行比较时,若是判断元素不惟一,好比,同姓名,同年龄,才视为同一我的。

  在判断时,须要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。

TreeSet集合排序有两种方式,Comparable和Comparator区别:

1:让元素自身具有比较性,须要元素对象实现Comparable接口,覆盖compareTo方法。

2:让集合自身具有比较性,须要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象做为实际参数传递给TreeSet集合的构造函数。

第二种方式较为灵活。

相关文章
相关标签/搜索