集合---Set

子接口:Set

Set 是Collection的子接口

(1) 特点:存储任意类型的对象,无序、无下标、元素内容不可以重复。
(2) 方法:继承于父接口Collection中的方法。往集合中添加元素 add(Object o)
① boolean add(Object obj):往集合中添加一个元素, 添加成功true;不成功-false。【开发重点】
② void clear():清空集合元素
③ boolean contains(Object o):判断当前集合中是否包含 o元素,包含-true;不包含-false。
④ boolean isEmpty():判断集合是否为空,为空-true; 不为空-false
⑤ boolean remove(Object o):将指定o对象从当前集合中删除,删除成功-true;不成功-false。【JavaSE引用】
⑥ int size():返回集合中元素的个数 【开发重点】
(3) 实现类:HashSet 如果自定义类型的对象往 HashSet中存储,为了保证元素内 容不重复,需要做到以下两点: 【开发应用重点】
① 覆盖 hashCode方法
a. 必须保证内容相同的对象返回值相同的哈希码值,为了提高效率, 尽可能做到内容不同的对象返回不同哈希码值
b. 覆盖原则:将所有的属性拼凑为int类型的结果作为返回值返回。
② 覆盖 equals方法:保证内容相同的对象返回true
理解内容:【面试表达】

HashSet保证存储元素内容不重复的执行原理:通过 set.add(s1)将对象存储HashSet集合中时,默认调用存储对象(s1)的 hashCode方法,获取哈希码值,哈希码值通过一 定计算(哈希值%底层数组长度)得到存储位置下标,如果此下标上没有存储过任何元素,则直接存储;但是存储该下标上已经存储对应的元素,此时默认调用 s1对象对应类中的 equals方法判断存储对象和此下标已经对象的内容是否相 同,如果 equals结果为true,代表内容相同对象,则s1被拒绝添加到集合中;但是如果equals结果为 false代表内容不同的对象,则s1允许添加到集合中,也是存储在此下标中, 这时采用是数组+链表形式进行存储。
集合---Set

(4) Set集合其他的实现类:
① LinkedHashSet:是HashSet的子类,去除重复元素, 同时可以按照元素添加顺序操作元素。如果自定类型的元素存储在LinkedHashSet中,为了保证元素内容不重复,存储元素对应类中需要覆盖 hashCode方法和 equals方法。
② TreeSet:是SortedSet接口的实现类,SortedSet是Set 的子接口可以对集合中元素按照内容进行排序。
【面试内容】

注意:如果TreeSet集合中存储的是自定义类型的对象,则对象对应的类需要实现java.lang.Comparable接口,同时实现 compareTo方法;TreeSet保证元素不重复, 取决compareTo方法的返回值,返回值为0,代表内容相同的元素,直接拒绝添加到TreeSet集合中。