java.util.Collection:存储一个一个的数据
子接口:Set存储无序的、不可重复的数据(高中学习的集合)
HashSet:主要实现类;底层使用的是HashMap,即使用数组+单向链表+红黑树结构进行存储;(jdk8之中)
LinkedHashSet:是HashSet的子类;在现有的组+单向链表+红黑树结构的基础上,又添加了一组双向链表,用于记录添加元素的先后顺序。即,我们可以按照添加元素的顺序实现遍历。便于频繁的查询操作。
TreeSet:底层使用红黑树存储,可以按照添加的元素的指定的属性的大小顺序进行遍历。
无序性: != 随机性。
添加元素的顺序和遍历元素的顺序不一致,是不是就是无序性?No!
到底什么是无序性?与添加的元素的位置有关,不像ArrayList一样是依次紧密排列的。
这里是根据元素的哈希值,计算其在数组中的存储位置,此位置不是一次排列的,表现为无序性。
不可重复性:添加到Set中的元素是不能相同的,比较的标准:需要判断hashCode()得到的哈希值以及equals()得到的boolean结果
哈希值相同且equals()为true,则是重复的。
添加到HashSet/LinkedHashSet中元素的要求:
要求元素所在的类需要重写两个方法:equals()和hashCode()
同时,要求equals()和hashCode()要保持一致性,我们只需要在IDEA中自动生成两个方法的重写即可,即可保证两个方法的一致性。