廊坊市做网站,网站文章不显示,上海建筑业服务平台,wordpress直播网站主题HashSet集合底层采取哈希表存储数据 哈希表是一种对于增删改查数据性能都较好的结构 hashCode方法和equals方法的配合流程 当添加对象的时候#xff0c;会先调用对象的hashCode方法计算出一个应该存入的索引位置#xff0c;查看该位置上是否存在元素 不存在#xff1a;直接存… HashSet集合底层采取哈希表存储数据 哈希表是一种对于增删改查数据性能都较好的结构 hashCode方法和equals方法的配合流程 当添加对象的时候会先调用对象的hashCode方法计算出一个应该存入的索引位置查看该位置上是否存在元素 不存在直接存 存在调用equlas方法比较内容 false存 true不存 Overridepublic boolean equals(Object o) {if (this o) return true;if (o null || getClass() ! o.getClass()) return false;Student student (Student) o;return age student.age Objects.equals(name, student.name);}Overridepublic int hashCode() {return Objects.hash(name, age);}
hashCode方法介绍 哈希值 是JDK根据某种规律算出来的int类型的整数 hashCode方法改造 重写hashCode方法 根据对象的属性值计算出的哈希值 Hashset原理解析 Hashset的添加过程 底层结构哈希表数组链表红黑树的结合体 1.创建HashSet集合内部会存在一个长度为16个大小的数组 2.调用的添加方法会拿着对象的hashCode方法计算出应存入的索引位置哈希值%数组长度 3.判断索引位置元素是否是null 是存入 不是说明有元素调用equals方法比较内容 对哈希值扰动进行二次哈希操作可以一定程度的减少链表挂载的数量 如何能够提高查询性能 1.扩容数组 扩容数组的条件 A当数组中的元素个数达到16*0.75加载因子12 扩容原数组2倍的大小 B:链表挂载的元素超过8阈值个并且数组长度没有超过64 2.链表转红黑树 链表挂载的元素超过了8阈值个并且数组长度到达了64 总结
1.set集合的底层原理是什么样的 JDK8之前哈希表底层使用数组链表组成 JDK8之后哈希表底层采用数组链表红黑树组成 2.哈希表的详细流程 1.创建一个默认长度16默认加载因子为0.75的数组数组名table 2.根据元素的哈希值跟数组的长度计算出应存入的位置 3.判断当前位置是否为null如果是null直接存入如果位置不为null表示有元素则调用equals方法比较属性值如果一样则不存如果不一样则存入数组 4.当数组存满到16*0.7512时就会自动扩容每次扩容原先的两倍 5.当链表挂载元素超过8个阈值 检查数组长度 没有到达64扩容数组 到达了64会转换为红黑树