1.Set及其实现类特点
java.util.Collection : 存储一个一个的数据
子接口 : Set: 存储无序,不可重复的数据(类似高中学的集合)
HashSet: 主要实现类,底层使用的是HashMap,即使用数组+单向链表+红黑树结构进行存储
LinkedHashSet:是HashSet的子类,在现有的数组+单向链表+红黑树机构的基础上,又添加了一组双向链表,用于记录添加元素的先后顺序,即我们可以按照添加元素的顺序实现遍历,便于频繁的查询操作TreeSet: 底层使用红黑树存储,可以按照添加的元素的指定的属性的大小顺序进行遍历
2.开发中的使用频率及场景
较List,Map来说,Set的使用频率较少
可以用来过滤重复的数据
3.Set中常用方法,即为Collection中声明的15个抽象方法.
4.Set中无序性,不可重复性理解
无序性 != 随机性
添加元素的顺序和遍历元素的顺序不一致,是不是就是无序性呢? No!
无序性与添加的元素的位置有关,不像ArrayList一样是一次紧密排列的
这里是根据添加的元素的哈希值,计算其在数组中的存储位置. 此位置不是一次排序的,表现为无序性
不可重复性: 添加到Set中的元素不能相同
比较的标准.需要判断hashCode()得到的哈希值及equals()得到的boolean型的结果
哈希值相同且equals返回true,则认为元素是相同的
5.添加到HashSet/LinedHashSet中元素的要求:
要求元素所在的类要重写两个方法: equals()和hashCode()
同时要求equals和hashCode()要保持一致性!只需要在idea中自动生成这两个方法的重写即可,即能保证两个方法的一致性!