Set
一:为啥会出现Set集合
set集合是没有get方法的
主要是进行去重操作,我们的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略低(链表开销)