博客
关于我
HashSet的底层原理
阅读量:346 次
发布时间:2019-03-04

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

HashSet在Java中是通过HashMap来实现的,这种设计使得HashSet能够在保证元素唯一性和无序性的同时,提供高效的操作。以下是对HashSet实现细节的详细分析:

  • HashMap的使用:HashSet使用HashMap来存储元素,通过哈希函数计算每个元素的存储位置。这种结构在平均情况下实现了O(1)的访问时间。

  • 唯一性保证:为了确保每个元素唯一性,HashSet使用HashMap的key部分存储元素,value部分固定为一个特殊的PRESENT对象。当元素已存在时,HashMap的put方法返回PRESENT,HashSet的add方法根据返回值判断元素是否存在。

  • 基本操作

    • add:调用HashMap的put方法,若返回值为null,则添加新元素并返回true;否则返回false。
    • remove:调用HashMap的remove方法,若返回值为PRESENT,则元素存在且被移除,返回true;否则返回false。
    • contains:调用HashMap的containsKey方法,返回是否存在该元素。
    • size和isEmpty:分别调用HashMap的size()和isEmpty()方法。
  • 序列化和克隆

    • 序列化:写出HashMap的容量、负载因子、大小和所有元素。
    • 反序列化:根据读取的容量和负载因子构建HashMap,并将元素放入其中,确保恢复后的HashSet与原样一致。
  • 性能优化:HashSet的性能优于其他集合类型,尤其是在哈希操作上,实现了高效的查找和存储。

  • 通过上述实现,HashSet在保持无序性和唯一性的同时,提供了优秀的性能,成为Java中常用且高效的集合实现之一。

    转载地址:http://ugve.baihongyu.com/

    你可能感兴趣的文章
    org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded
    查看>>
    org.tinygroup.serviceprocessor-服务处理器
    查看>>
    org/eclipse/jetty/server/Connector : Unsupported major.minor version 52.0
    查看>>
    org/hibernate/validator/internal/engine
    查看>>
    Orleans框架------基于Actor模型生成分布式Id
    查看>>
    SQL-36 创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表。
    查看>>
    ORM sqlachemy学习
    查看>>
    Ormlite数据库
    查看>>
    orm总结
    查看>>
    os.environ 没有设置环境变量
    查看>>
    os.path.join、dirname、splitext、split、makedirs、getcwd、listdir、sep等的用法
    查看>>
    os.removexattr 的 Python 文档——‘*‘(星号)参数是什么意思?
    查看>>
    os.system 在 Python 中不起作用
    查看>>
    OS2ATC2017:阿里研究员林昊畅谈操作系统创新与挑战
    查看>>
    OSCACHE介绍
    查看>>
    SQL--合计函数(Aggregate functions):avg,count,first,last,max,min,sum
    查看>>
    OSChina 周五乱弹 ——吹牛扯淡的耽误你们学习进步了
    查看>>
    SQL--mysql索引
    查看>>
    OSChina 周四乱弹 ——程序员为啥要买苹果手机啊?
    查看>>
    OSChina 周日乱弹 —— 2014 年各种奇葩评论集合
    查看>>