千家信息网

JDK的Set源码分析

发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,这篇文章主要介绍"JDK的Set源码分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JDK的Set源码分析"文章能帮助大家解决问题。首先,我们看一下Hash
千家信息网最后更新 2024年09月25日JDK的Set源码分析

这篇文章主要介绍"JDK的Set源码分析"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"JDK的Set源码分析"文章能帮助大家解决问题。

首先,我们看一下HashSet

  1. private transient HashMap map;


  2. // Dummy value to associate with an Object in the backing Map

  3. private static final Object PRESENT = new Object();

可见,他适配了HashMap,那么他的功能是如何委托给HashMap结构的呢?

  1. public boolean add(E e) {

  2. return map.put(e, PRESENT)==null;

  3. }

在hashMap中,我们大多数时候是用value,但是在set的时候,却很好的利用了已有类HashMap,他利用了HashMap的key的唯一性来保证存储在Set中的元素的唯一性;

private static final Object PRESENT = new Object();

是这个HashMap所有key的value,他只是一个形式,而我们真正的数据是存在在key中的资源;

我们最后拿到的迭代器也是:

  1. public Iterator iterator() {

  2. return map.keySet().iterator();

  3. }


map的keySet的迭代器;

同理,我们看看LinkedhashMap;

  1. public LinkedHashSet(int initialCapacity, float loadFactor) {

  2. super(initialCapacity, loadFactor, true);

  3. }


  4. /**

  5. * Constructs a new, empty linked hash set with the specified initial

  6. * capacity and the default load factor (0.75).

  7. *

  8. * @param initialCapacity the initial capacity of the LinkedHashSet

  9. * @throws IllegalArgumentException if the initial capacity is less

  10. * than zero

  11. */

  12. public LinkedHashSet(int initialCapacity) {

  13. super(initialCapacity, .75f, true);

  14. }


  15. /**

  16. * Constructs a new, empty linked hash set with the default initial

  17. * capacity (16) and load factor (0.75).

  18. */

  19. public LinkedHashSet() {

  20. super(16, .75f, true);

  21. }

调用了父类的构造函数;构造函数如下:

  1. HashSet(int initialCapacity, float loadFactor, boolean dummy) {

  2. map = new LinkedHashMap(initialCapacity, loadFactor);

  3. }

生出了LinkedHashMap;

同理,我们一样可见到treeMap的实现:

  1. private transient NavigableMap m;


  2. // Dummy value to associate with an Object in the backing Map

  3. private static final Object PRESENT = new Object();

关于"JDK的Set源码分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

源码 分析 知识 函数 唯一性 时候 行业 迭代 不同 实用 元素 内容 功能 只是 实用性 实际 形式 数据 文章 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 第三方网络技术含义 计算机网络技术是程序员吗 telnet服务器配置 潍坊科技学院数字媒体网络技术 王者荣耀找不到自己之前的服务器 小学生五年级网络安全手抄报难度 来自苏州优行网络技术 网络安全问题属于社会治安问题吗 数据库权限表的设计方案 手机端寺院功德系统软件开发 网络安全技术专题论文 网络安全密码大全 计算机网络技术学VF吗 国际服务器和网卡哪个好 用友显示服务器失败 软件开发合同付款阶段 个人软件开发者怎么生存 梦幻西游兰亭序服务器是电信吗 核心网络技术支撑工程师考试 http静态服务器 网络安全培训班出来的几年 网络安全法律体系 湖北服务器硬盘测评 玉溪专业上门回收服务器 自动抢号软件开发 wow怀旧服在服务器中怎么看区 mqtt服务器地址是什么 网络安全给我们带来的影响 数据库的最终存储形式是什么 上海直播软件开发团队
0