博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么HashSet里value不是null?
阅读量:5011 次
发布时间:2019-06-12

本文共 534 字,大约阅读时间需要 1 分钟。

今天朋友去面试,面试官问到HashSet的源码.大家都知道HashSet底层是用HashMap实现的.

问到map存的是什么的时候,面试官说应该存的是null,我朋友说是一个对象.

我朋友说我记得源码是这样写的,面试官说,用null效率高啊.

然后他们讨论了十分钟...

回去路上,和我说了这个.起先我也不明白为什么不用null呢.

我也清楚记得HashSet的底层的value是一个final的Object对象.

把源码拉下来,看到HashSet的remove方法时,瞬间明白了.

显然Set的remove方法应当是

移除一个元素,并且返回是否移除成功的boolean

而HashSet的remove是使用HashMap实现,则是map.remove

而map的移除会返回value,如果底层value都是存null,

显然将无法分辨是否移除成功.

public boolean remove(Object o) {        return map.remove(o)==PRESENT;    }

结尾,感觉这种问题算是很细节的东西.有时候面试官也会想当然的.

转载于:https://www.cnblogs.com/zhhiyp/p/9720739.html

你可能感兴趣的文章
Java进阶知识点6:并发容器背后的设计理念 - 锁分段、写时复制和弱一致性
查看>>
Shell编程之批量安装服务脚本实例
查看>>
tomcat 报错处理
查看>>
使用iframe给页面的localStorage扩容
查看>>
第四次作业
查看>>
Java 内存映射文件
查看>>
衡量软件性能三大常用指标及其相互关系
查看>>
#网页中动态嵌入PDF文件/在线预览PDF内容#
查看>>
Django基础八之cookie和session
查看>>
测试样式
查看>>
Django------The template 模版高级进阶1 2012.08.30
查看>>
Makefile ===> Makefile 快速学习
查看>>
face detection[HR]
查看>>
java性能调优工具
查看>>
C# 其他的Url 文件的路径转化为二进制流
查看>>
cmake使用
查看>>
ios7上隐藏status bar
查看>>
构造方法和全局变量的关系
查看>>
POJ 3114 Tarjan+Dijkstra
查看>>
BZOJ 1116 并查集
查看>>