hashset add的方法 value设置为PRESENT有什么用么,是不是添加一个对象就给这个
对象设置一个一模一样的PRESENT啊,这样都一样了,有什么意义么
还有 为什么hashset查询速度会快 他是如何查询对象的
![](https://profile-avatar.csdnimg.cn/1155ee98134442738971b414f92434a3_qq_27836205.jpg!4)
java 集合 hashset的add问题 望大神解惑
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- little_how 2017-03-03 08:30关注
1.首先hashset的底层实现是hashmap,hashset就是hashmap的keyset;
2.hashmap需要的是key和value,hashset的add只是有一个key,而value没有,所以需要用一个占用空间小的不变的PRESENT来;为什么hashset读取快,因为hashmap内部有一个hash算法;
hashmap维护的是一个数组;
hash算法是根据你的hashCode来计算,最简单的就是取模;
这样就能找到具体的下标,也就是数组的下标,因为hashmap引入了红黑树,所以hash冲突损耗的效率就可以大大减少;举个简单的例子;
你的hashmap里面初始化的数组大小为16;
如果我存10个数字;
如:14 22 9 7 5 3 1 8 9 19
如果有取模(求余)的话对应下标就是
14 6 9 7 5 3 1 8 9 3;
那么查询的时候可以直接根据下标取值;
其中3和19放置的位置一致,判定是否为当前值就需要用equals方法咯;java中实现的是用的&算法,更快;
希望可以帮到你....
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵