Set set 和 HashSet set有何区别

Set set 和 HashSet set区别是:TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中少数约束。

Set set 和 HashSet set有何区别-Worktile社区

set下面有Hashset和TreeSet,Hashset顾名思义里面是哈希表结构,TreeSet就是树结构。

TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。

HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中少数约束。

HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

Set

概念:Set集合类似于一个瓶罐子,集合中的多个对象之间没有明显的顺序排列。

​特点如下:

​set集合不允许包含相同的元素,如果试图要把两个相同的元素加入到同一个Set集合中,则将添加失败;add方法返回false,且新元素不会被加入。【无序容器】

​使用equals方法判断两个对象是否相同,不使用==运算符;

​非常多包含一个Null元素。

​常用:

最常用的实现类有HashSet、LinkedHashSet和TreeSet;

TreeSet是一个有序的集合容器,它实现了SortedSet接口,根据compare()方法和compareTo()方法进行排序

HashSet:

概念:HashSet顾名思义是通过hash算法存储集合元素的,依赖数据结构是哈希表,因而它具有良好存取和查找功能;HashSet是Set接口的实现类,多数情况下使用Set集合都是通过HashSet来实现的。

​特点如下:

HashSet 集合中存储的元素(对象)是无序排列的,插入的元素(对象)是根据的是hashcode;

HashSet是线程不安全的(非同步的);

HashSet允许为null,但仍不允许有重复的值;

HashSet实现了Serializable和cloneable两接口。

延伸阅读:

什么是哈希表?

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。

对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)==f(k2),这种现象称为冲突(英语:Collision)。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数f(k)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表或散列,所得的存储位置称散列地址。

若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。

文章标题:Set set 和 HashSet set有何区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37884

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月13日 上午2:13
下一篇 2023年2月13日 上午2:16

相关推荐

  • c++设计三种不同继承方式的意义是什么

    C++中继承是面向对象编程的一个核心概念,它使得子类可以继承和扩展父类的功能。C++提供了三种不同的继承方式: 公有继承(Public inherited)、保护继承(Protected inherited) 和 私有继承(Private inherited)。这三种继承方式在访问控制和接口继承方面…

    2023年11月13日
    21000
  • DevOps中的变更管理和应急响应

    在DevOps实践中,变更管理和应急响应是确保软件交付和维护的关键环节。1、变更管理保障软件在持续集成和持续部署(CI/CD)中的稳定性和可追溯性;2、应急响应则及时解决在软件运行中出现的紧急情况,维护系统的稳定运行和用户满意度。两者共同构成了DevOps中软件开发与运维的核心支柱,确保快速迭代与高…

    2024年1月2日
    14300
  • 缺陷管理的流程有哪些

    缺陷管理的一般流程包括的步骤:1、缺陷预防;2、可交付成果基线;3、缺陷发现;4、缺陷解决;5、流程改进。缺陷预防缺陷预防是在测试的早期阶段消除缺陷的优异方法,而不是在后期发现缺陷然后修复它。 1、缺陷预防 缺陷预防是在测试的早期阶段消除缺陷的优异方法,而不是在后期发现缺陷然后修复它。这种方法也具有…

    2023年1月10日
    87100
  • 什么软件可以记录每天的工作

    可以记录每天的工作的软件有:1、工时记录;2、时间记录软件;3、上班记录;4、印象笔记;5、千本笔记。工时记录是一款热度很高的软件,用户们在软件中可以清楚的知道自己的工资发放时间和数量,而且可以帮助用户们及时的记录自己的工作时间。 一、工时记录 这是一款热度很高的软件,用户们在软件中可以清楚的知道自…

    2023年4月20日
    1.5K00
  • 如何在DevOps中有效应对变化

    在DevOps实践中应对变化是一个持续的挑战,它要求团队不断适应技术、市场及组织文化的变革。有效应对变化首要步骤是确保快速响应和持续改进机制的建立。核心观点包括1、建立跨功能团队、2、采用自动化和工具、3、持续学习和实验文化、4、增强沟通与协作、5、实施敏捷方法、6、构建可伸缩架构和7、迭代计划和反…

    2023年12月13日
    19800
  • 有哪些高超的Java代码技巧

    技巧有:1、尽量使用基本数据类型,避免自动装箱和拆箱;2、尽量使用函数内的基本类型临时变量;3、尽量不要在循环体外定义变量;4、禁止使用JSON转化对象;5、尽量指定类的final修饰符。装箱和拆箱都是需要CPU和内存资源的,应避免使用自动装箱和拆箱。 1、尽量使用基本数据类型,避免自动装箱和拆箱 …

    2023年2月6日
    22900
  • 云服务在物联网(IoT)中的应用

    开展云服务在物联网(IoT)领域的应用探讨,云服务为物联网带来数据处理和分析能力的提升以及强化设备管理及互联互通两大关键贡献尤为重要。第一,云服务提供了海量数据存储,实现设备数据安全持久保存。第二,通过强悍运算能力,云服务支撑对数据作出即时分析,从而为决策制定提供智慧。以此展开,云服务使得物联网应用…

    2023年12月25日
    15300
  • 真成投资李剑威:在非线性事业中建立成长秩序

    文| babayage 编辑 | 笑 笑 从咨询起步转型投资,李剑威的成长模式与众不同:非线性曲线、模块化能力沉淀、强调底层价值观、擅长把握核心价值、充分自信,比如“我们参与的项目战略层面不会出问题”。 非线性成长路径背后,是秩序井然的成长逻辑,是高效、精准沉淀长期价值的能力。 从咨询到投资 建立跨…

    2022年3月20日
    51100
  • oa系统公司

    标题:OA系统公司的市场趋势与选择标准 面临OA系统公司的选择,组织应关注1、产品特性与定制能力、2、技术支持与服务、3、系统安全与稳定性、4、用户体验及友好性、5、性价比与成本考量。在众多方面中,系统安全与稳定性显得尤为重要,因为OA系统会涉及敏感的企业数据与员工信息。一个优秀的OA系统不仅能有效…

    2024年1月16日
    9000
  • 打印文档用什么软件

    打印文档用的软件有:1、打印纸;2、爱佳能打印机;3、硕方打印;4、word;5、WPS Office;6、Word表格编辑;7、手机word文档。打印纸有非常丰富的模板资源,涵盖了非基础的文件编编辑和管理。 一、打印纸 有非常丰富的模板资源,涵盖了非基础的文件编编辑和管理。各种表格以及各种模板可以…

    2023年4月21日
    95500

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部