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);

}

最新文章

  1. Crowd 2.7汉化中文包(原创首发)
  2. 构建 iOS 风格移动 Web 应用程序的8款开发框架
  3. iOS之走进精益编程01
  4. 51nod1403 有趣的堆栈
  5. 减少远程ssh的延迟
  6. PC上面的蓝牙的通信(C#)
  7. Codeforces Education Round 11
  8. 学习率 Learning Rate
  9. sql server 表分区
  10. C# NetStream
  11. Sybase IQ 的基础
  12. DUILIB消息处理过程
  13. 如何让gitbook与github仓库关联
  14. MyEclipse weblogic Deploy Location项目名称不正确解决方案
  15. Oracle 12c on Solaris 10 安装文档
  16. Day21-自定义simple_tag/filter
  17. openwrt web管理luci界面修改
  18. [Leetcode] search a 2d matrix 搜索二维矩阵
  19. [笔记]一道C语言面试题:大整数乘法
  20. MySessionFactory

热门文章

  1. C#MD5笔记
  2. java学习笔记之Java的特点
  3. nginx的开机自启、server命令启动、nginx.conf配置
  4. 一道算法题-八皇后问题(C++实现)
  5. TP5:隐藏inde.php文件
  6. cmd:相关命令和笔记
  7. Hibernate多对一关联关系
  8. Unix shell输入输出重定向
  9. im2rec 修改resize
  10. 开源项目之防火墙 tdifw