Java集合类-Set
- 为什么会有泛型
早起的object 类型可以接收任意的对象类型, 但是在实际的使用中, 会有类型转换的问题, 也就存在着隐患, 所以java 提供了泛型来解决这个安全问题
如何使用泛型
没使用泛型报错的情况
使用泛型
1.7 以后 右边的泛型可以不指定, 与左边一致
如果泛型不明确指定, 默认是Object 类型
泛型值存在于编译时期为了确保强制转换不出错。
set 接口概述
不包含重复元素的集合, 不能通过索引值操作元素
主要实现类:
1.HashSet 类概述(无序性, 不可重复性 底层结构是数组加链表)
不保证set 的迭代顺序(无序性, 不等于随机性, 存储的顺序并非按照数组索引的顺序添加, 是hash 值%16 算的数组下标)
特别是他不保证该顺序恒久不变(存入和取出的顺序不一致)
HashSet 如何保证元素唯一性
底层数据结构式hash 表(元素是链表的数组)
哈希表依赖于哈希值存储
添加功能底层依赖的两个方法
int hashCode()
boolean equals(object obj)
自动去重
去重原理:set 集合内部都是通过哈希表的结构去重, 依赖存储对象元素的hashcode 和equals 方法
去重步骤:
2. LinkedHashSet
. hashset 的子类LinkedHashset 可以保证存入和取出的顺序是一致的
实际上也是无序的, 但是在添加数据的同时, 每个数据还维护了2 个引用, 记录此时数据的前一个数据和后一个数据
优点, 对于频繁遍历的操作, 要优与hashset
- treeSet(有序, 不可重复)
只能添加相同类的元素,同一类型的数据,可以按照指定类型排序