Set
- 无序
- 不包含重复元素的集合
- 不带索引的方法,所以不能使用普通for循环遍历
哈希值
- 是JDK根据对象的地址 或者 字符串 或者 数字 算出来的 int 类型的 数值
- Object 类中有一个方法可以获取对象的哈希值
- public int hashCode()
- 返回对象的哈希码值
- public int hashCode()
- 对象的哈希值特点
- 同一个对象多次调用 hashCode() 方法返回的哈希值相同
- 默认情况下,不同对象的哈希值不同。
- 但是重写 hashCode() 方法,可以实现让不同对象的哈希值相同。
哈希表
- JDK8 之前,底层采用 数组 + 链表 实现,可以说是一个元素为链表的数组
- JDK8之后,长度比较长的时候,底层实现了优化
HashSet 集合
特点
- 底层数据结构是 哈希表
- 对集合的迭代顺序不做任何保证,即不保证存储和取出元素的顺序一致
- 不带索引的方法,不能用普通for循环
- 是Set 集合,不包含重复元素
HashSet 集合存储元素
- 要保证元素唯一性,需要重写 hashCode() 和 equals()
LinkedHashSet 集合
特点
- 哈希表和链表实现的Set接口,具有可预测的迭代次序
- 由链表保证元素 有序,元素的存储和取出顺序是一致的
- 由哈希表保证元素唯一,没有重复的元素
TreeSet 集合
特点
- 元素有序
- 不是指存储和取出顺序一致
- 而是指按照一定的规则进行 排序 ,具体排序方式取决于构造方法
- TreeSet()
- 根据元素的自然排序进行排序
- TreeSet(Comparator comparator)
- 根据指定的比较器进行排序
- TreeSet()
- 不带索引,NO 普通for循环
- Set 集合,不包含重复元素
自然排序Comparable的使用
- 存储学生对象并遍历,创建TreeSet 集合使用 无参构造
- 要求:
- 按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
结论
- 用 TreeSet 集合存储自定义对象,无参构造 使用 自然排序 对元素进行排序
- 自然排序,即让元素所属的类 实现 Comparable 接口 ,重写CompareTo(T o)方法
- 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。
比较器Comparator 的使用
- 存储学生对象并遍历,创建TreeSet 集合使用 带参构造
- 要求:
- 按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
结论
- 用 TreeSet 集合存储自定义对象,带参构造 使用 比较器排序 对元素进行排序
- 比较器排序,即让集合构造方法接收 Comparator的实现类对象,重写 Compare(T o1,T o2) 方法
- 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。