一、java.util.Set
是Collection接口的子接口,特点:
- 不允许重复元素
- 不保证先后顺序
- 没有索引值
二、常用的实现类:
- HashSet:底层使用哈希表,查找对象的速度嗷嗷快。
- LinkedHashSet:底层也是哈希表,但是额外还有链表,用来维护先后顺序。
- TreeSet:有大小排序。
三、重点问题:
Set集合是如何确定有没有重复元素的?换言之,如何才能得知两个对象相同还是不同?
哈希值:int类型---------------------------->hashcode()<--------------地址值(16进制)
(并非Java代码获取)
地址值与int类型并非一一对应,地址值>>int型,所以可能有哈希冲突
首先计算出hash值,在%16,放到对应的桶中
四、大小比较方式:
(1)如果希望对集合当中的元素进行排序,但是排序的规则并不写死在类中,那么就可以使用方法:
public static void sort(List list, Comparator comp):第二个参数代表排序的规则。
(2)Comparable:用自定义的类自己去实现它。
口诀:升序就是我减他。 public int compareTo(T o)
(3)Comparator:自定义的类自己不用实现,而是作为第二个参数。
口诀:升序就是一减二。public int compare(T o1, To2)
五、可变参数:
可变参数其实是一个语法糖,原理:
(1)底层是一个数组。
(2)在传参时,可以是任意多个数据。
(3)一个方法中最多有一个可变参数。
(4)必须处于最后一个位置。