Set的源码分析
2024-09-29 01:31:53
Set的内部实现其实是一个Map。即HashSet的内部实现是一个HashMap,TreeSet的内部实现是一个TreeMap,LinkedHashSet的内部实现是一个LinkedHashMap。
public HashSet() {
map = new HashMap<>();
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
public TreeSet() {
this(new TreeMap<E,Object>());
}
public LinkedHashSet() {
super(16, .75f, true);
}
但是,存到Set中只有一个元素,又是怎么变成(key,value)的呢?
以HashSet为例
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
public Iterator<E> iterator() {
return map.keySet().iterator();
}
原来是,把添加到Set中的元素作为内部实现map的key,然后用一个常量对象PRESENT对象,作为value。
这是因为Set的元素不可重复和Map的key不可重复有相同特点。Map有一个方法keySet()可以返回所有key。
public HashSet() {
map = new HashMap<>();
}
HashSet(intinitialCapacity, floatloadFactor, booleandummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
最新文章
- Crowd 2.7汉化中文包(原创首发)
- 构建 iOS 风格移动 Web 应用程序的8款开发框架
- iOS之走进精益编程01
- 51nod1403 有趣的堆栈
- 减少远程ssh的延迟
- PC上面的蓝牙的通信(C#)
- Codeforces Education Round 11
- 学习率 Learning Rate
- sql server 表分区
- C# NetStream
- Sybase IQ 的基础
- DUILIB消息处理过程
- 如何让gitbook与github仓库关联
- MyEclipse weblogic Deploy Location项目名称不正确解决方案
- Oracle 12c on Solaris 10 安装文档
- Day21-自定义simple_tag/filter
- openwrt web管理luci界面修改
- [Leetcode] search a 2d matrix 搜索二维矩阵
- [笔记]一道C语言面试题:大整数乘法
- MySessionFactory