集合Collection之Set(无序,唯一)

一、Set集合常见的子类有:


1、HashSet:无序,唯一
       底层数据结构是哈希表,依赖hashCode和equals方法,由这两个方法保证唯一
       HashSet的add方法底层实际上使用的是HashMap的put方法,键是要添加的值,值是一个Object常量

2、LinkedHashSet:有序,唯一
     底层数据结构是链表和哈希表,由链表(一个元素为链表的数组)保证有序,哈希表保证唯一

3、TreeSet:排序,唯一
     ● 底层数据结构是红黑树,一种自平衡的二叉树。
     ● TreeSet能够对元素按照某种规则进行排序,排序的方式有两种,自然排序和比较器排序,用哪种排序,取决于构造方法
     ●  无参构造,使用的是自然排序,让元素所属的类实现自然排序Comparable接口,重写compareTo方法
     ●  比较器排序,让集合的构造器接收一个比较器接口的子类对象comparator

4、CopyOnWriteArraySet:
     ●  它是线程安全的。 set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突。
     ●  因为通常需要复制整个基础数组,所以可变操作(add、set 和 remove 等等)的开销很大。
     ●  迭代器不支持可变 remove 操作。
     ●  使用迭代器进行遍历的速度很快,并且不会与其他线程发生冲突。在构造迭代器时,迭代器依赖于不变的数组快照。

二、HashSet的实现:

   对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,要保存的元素作为HashMap的key,
   value是一个static final的Object对象标识。因此HashSet 的实现比较简单,相关HashSet的操作,
   基本上都是直接调用底层HashMap的相关方法来完成,所以对于HashSet中保存的对象,请注意正确重写其equals和hashCode方法,
   以保证放入的对象的唯一性。

你可能感兴趣的:(集合Collection之Set(无序,唯一))