Java集合(五) Set 添加元素

摘要:
Set集合如何实现添加元素以确保Java中没有重复?HashSet类实现了Set接口,它的底层实际上封装了HashMap来实现它。HashSet使用HashCode算法访问集合中的元素。在添加元素的过程中,HashSet向HashSet添加元素。首先,调用元素所属类的hashCode()方法,然后比较两个元素的哈希值是否相同;元素添加成功。如果哈希值相同。

Java中Set集合是如何实现添加元素保证不重复的?

  Set集合是一个无序的不可以重复的集合。今天来看一下为什么不可以重复。

  Set是一个接口,最常用的实现类就是HashSet,以HashSet为例。

  HashSet类实现了Set接口, 其底层其实是包装了一个HashMap去实现的。HashSet采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。

HashSet 添加元素过程

  向 HashSet 添加元素,首先调用元素所在类的 hashCode() 方法,计算元素的哈希值,算出在 hashset 底层数组的存放位置。

  判断数组该位置上是否已经有元素。

    如果该位置没有其他元素,则元素添加成功。

    如果该位置,有其他元素,则比较两个元素的 hash 值是否相同;

        如果 hash值不相同,则元素添加成功, 以链表的形式存储;

        如果 hash值相同,再用 该类的equal() 方法比较

          equal  返回 true, 元素添加失败,替换了该元素

          equal 返回false 元素添加成功, 并以链表的节点形式存储

  更详细看:https://www.cnblogs.com/wupeixuan/p/8858816.html

【1】:https://www.cnblogs.com/wupeixuan/p/8858816.html

免责声明:文章转载自《Java集合(五) Set 添加元素》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Javascript实现页面内元素添加滚动条Rails的静态资源管理(二)—— 如何使用 Asset Pipeline下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

数组概述和特点

数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点:       1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。       2. 其元素必须是相同类型,不允许出现混合类型。       3. 数组类型可...

Selenium系列之--04 不同浏览器获取Xpath的方法

1、Chrome浏览器 1.1 获取XPath 1.1.1 使用浏览器打开需测试的网址,然后点击【F12】按钮,打开开发者调试工具; 1.1.2 点击开发者工具中第一行的第一个对话框Elements,这时就看到了网页的源代码。 1.1.3 接下来找到要定位的元素,在列表上点击右键,Copy--->“Copy Xpath”,就获取到对应的Xpath...

Tomcat系列(10)——Tomcat主要设计模式5种(外观,责任链,观察者,模板方法,命令模式)

核心部分 外观模式: RequestFacade应用门面模式(facade)来封装HttpServletRequest。 观察者模式: 事件监听机制,控制组件生命周期的 Lifecycle 、Servlet 实例的创建、Session 的管理、Container 管理等应用了观察者模式。相关的类有LifecycleListener, ContainerL...

ArcGIS API for JavaScript 4.2学习笔记[17] 官方第七章Searching(空间查询)概览与解释

空间分析和空间查询是WebGIS有别于其他Web平台的特点。到这一章,就开始步入空间分析的内容了。 【Search widget】 介绍空间查询的核心小部件“Search”。 【Search widget with multiple sources】 在多种信息源中进行空间搜索。 【Query features from a FeatureLayer】...

(二)Java数组特性总结,你真的了解数组吗?

一、数组的特殊性 (一)数组标识符是一个引用,指向堆中创建的一个真实对象,这个对象(数组)保存了指向保存其他对象的引用。 (二)数组中保存引用类型时保存的是对象引用,基本数据类型数组保存基本数据的值。 (三)数组的length只表示数组能够容纳多少元素,不能保存实际保存的元素个数。 (四)多维数组可以使用Arrays.deepToString()将多维数组...

如何卸载VSTO外接程序?

由于长时间没有使用VSTO,突然打开EXCEL编辑,还没有发现什么问题,在保存的时候在我的表格第一行弹出了“This text was added by using code”,并且占据了我的表格第一行。经过查询发现这是VSTO的入门案例。经过苦苦查询并做一下记录: /******************************************分割...