Set

一:为啥会出现Set集合

主要是进行去重操作,我们的List集合是有重复的,所以我们会用到Set来进行去重。

二:我们常见的Set集合

①HashSet集合;②TreeSet集合;③LinkedHashSet集合

①HashSet:它的底层是HashMap,它是由HashMap的key值来存储数据,它的底层原理和HashMap一样。

无序性:无序性!=随机性。指元素在底层存储的位置是无序的

   不可重复性:加入相同元素时,后面的元素不能加入进去

  此类允许使用 null 元素

当向Set中添加对象时,首先调用此对象所在类的hashCode(),计算此对象的哈希值,此哈希值决定了此对象在Set中的存储位置。若此位置没有对象存储,则这个对象直接存储在此位置,若此位置已有对象存储,再通过equals()比较两个对象是否相同,如果相同,后面的元素不能添加进来。

②TreeSet:它的底层是TreeMap,底层是红黑树,原理和TreeMap一样。

TreeSet是有序的,去重的集合。

TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

③LinkedHash:它的底层第哈希表和链表,链表主要为了确定顺序。

特点:具有顺序性、线程不安全,去重。

采用的链表维护插入元素的顺序,其他与HashSet无太大差异,性能较HashSet略低(链表开销)

 

Tags: