Java常用类:HashSet类详解

【Java集合框架】13——HashSet 类 HashSet 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

HashSet

HashSet存放的是无序的,去重的数据集合,看源码的话可以发现HashSet能做到去重是因为底层维护了HashMap,用HashMap的key来当HashSet的元素,因为map的key不会重复,所以HashSet的元素是去重的。

1.成员变量

	private transient HashMap<E,Object> map;
	//在添加元素时,创建新对象
    private static final Object PRESENT = new Object();

2.构造方法

所有的构造方法都是初始化HashMap

	public HashSet() {
        map = new HashMap<>();
    }
     public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }
     public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }
     public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }
    //在LinkedHashSet的构造方法中,会继承该方法
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

3.其他方法的源码

3.1 add方法
	public boolean add(E e) {
		//因为map的key不会重复,所以当重复元素添加进去只会把旧的value覆盖掉
        return map.put(e, PRESENT)==null;
    }
3.2 size方法
	public int size() {
		//返回map的长度
        return map.size();
    }
3.3 contains方法
	public boolean contains(Object o) {
		//返回是否包含某个值
        return map.containsKey(o);
    }
3.4 remove方法
	public boolean remove(Object o) {
		//移除set中的某个元素
        return map.remove(o)==PRESENT;
    }
3.5 isEmpty方法
public boolean isEmpty() {
		//判断集合是否为空
        return map.isEmpty();
    }
4.HashSet的循环只能使用迭代器或者增强for循环
public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("aa");
        set.add("bb");
        set.add("cc");
        set.add("aa");//不会存在两个aa
        for(String item:set){
            System.out.println(item);
        }
    }
结果:
aa
bb
cc
5.LinkedHashSet
public LinkedHashSet() {
        super(16, .75f, true);
    }
//底层是维护的LinkedHashMap
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

所以LinkedHashSet其他的特点与HashSet一样,不同的是LinkedHashSet是有序的。

解析Java中1000个常用类:HashSet类,你学会了吗? HashSet类位于java.util包中,是Set接口的一个具体实现。它基于哈希表实现,不允许存储重复的元素,并且不保证集合的迭代顺序。// 构造方法和主要方法省略。 阅读详情

相关推荐

【Java集合】Set 接口 —— HashSet 与 TreeSet 详解

本文详细介绍了 Java 中 Set 接口及其两个主要实现类 HashSet 和 TreeSet。Set 接口继承自 Collection 接口,与 Collection 接口方法基本一致但更严格,保证元素不重复且 HashSet 中元素无序,TreeSet 以二叉树方式存储元素可实现排序。HashSet 根据对象哈希值确定存储位置,通过 hashCode () 和 equals () 方法确保元素不重复。TreeSet 内部采用平衡二叉树存储元素,有多个特有方法如 first ()、last () 等。

2303_76696898的博客 1349

HashSet类

HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。在上面的实例中,Runoob 被添加了两次,它在集合中也只会出现一次,因为集合中的每个元素都必须是唯一的。HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。可以使用 for-each 来迭代 HashSet 中的元素。HashSet 是无序的,即不会记录插入的顺序。HashSet 实现了 Set 接口。

weixin_64275663的博客 590

HashSet类的用法.pdf

HashSetHashSetHashSetHashSetHashSetHashSetHashSetHashSetHashSet

java中的HashSet类

对于要添加的元素A,遍历集合,将A与集合中的每一个元素进行比较,如果两者的hash值不相等,则继续和下一个元素比较,否则使用equals方法比较两个元素的值是否相等,相等,则不将A添加到集合中,不相等,则继续和下一个元素比较,当和最后一个元素比较完成无异常情况时,将A添加到集合中。以String类为例,String类中重写了hashCode(使用内容生成hashcode值)和equals(比较内容是否相等),则可以在使用set集合添加String类型元素时不会将重复元素添加进去。这里面的东西哪去了?

Watermelon_Mr的博客 457

hashset类的使用

这个是关于java语言的hashset集合类的一些基本用法和详解了个方法的使用

Keil5安装教程(保姆级)Keil5mdk安装步骤

6、复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活mdk,显示mdk的使用期限。6、复制生成的激活码,粘贴在New License ID Code处,点击Add LIC,即可成功激活C51,显示mdk的使用期限;3、在安装文件中点击keygen.exe文件,粘贴复制过的CID,选择Target为C51,点击Generate,生成激活码;4、在弹出的界面中会自动安装在安装keil的路径,点击“Next”进行后续安装,安装完成后,点击“Finish”。

m6886258的博客 9万+

Java集合详解——HashSet类(包括 底层机制 源代码分析)

(1)HashSet实现了Set接口,是Set接口的实现子类。(2)HashSet实际上是HashMap,看源码:(3)不能有重复的元素或对象。可以存放null值,但只能有一个null。(4)HashSet不保证元素是有序的,取决于调用hash()方法后,再确定索引的结果。

m0_75013084的博客 1213

高通IPA硬件加速介绍

‌ 高通IPA (Internet Protocol Accelerator)模块是一种硬件加速模块,由高通公司(Qualcomm)提供,主要用于优化移动设备上的网络数据传输,特别是通过 LTE 、 5G 等移动网络的数据传输‌‌。IPA模块通过硬件加速,显著提高了数据传输的速度和效率,同时降低了设备的功耗,并提供了更稳定的网络连接,减少了数据传输中的丢包和延迟‌。

四儿家的小祖宗的博客 1622

【JAVA基础】集合类之HashSet的原理及应用

近期几期内容都是围绕该体系进行知识讲解,以便于同学们学习Java集合篇知识能够系统化而不零散。本文将介绍HashSet的基本概念,功能特点,使用方法,以及优缺点分析和应用场景案例。

qq_39666711的博客 1394

Mysql授权允许远程访问

前言 Mysql授权允许远程登录后,linux中安装的mysql可以与Navicat for Mysql(可视化)等连接,在可视化软件下管理数据库。 注意:不能使用临时密码 设置密码命令: alter user 'root'@'localhost' identified by '这里是你的密码'; 授权允许远程访问 一、授权命令: grant all privileges on *.* to '...

🏆 前端领域优质创作者 3万+

python:实现矩阵SVD分解(附完整源码)

python:实现矩阵SVD分解(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 603

Java HashSet的实现原理详解

HashSet是Java Map类型的集合类中最常使用的,本文基于Java1.8,对于HashSet的实现原理做一下详细讲解。 (Java1.8源码:http://docs.oracle.com/javase/8/docs/api/) 一、HashSet实现原理总结 HashSet的实现原理总结如下: ①是基于HashMap实现的,默认构造函

渴望,就奋力追寻... 4万+

RK3288芯片MIPI-DSI显示疑难杂症大揭秘:从点不亮到花屏全攻克

本文针对RK3288芯片MIPI-DSI接口常见的显示异常问题进行系统性分析,提出了完整的排查解决方案。硬件方面,重点检查排线连接、电源供应和散热问题;软件方面,强调屏参配置、驱动版本及时序参数的精确调整。通过两个典型案例(点不亮与花屏)具体说明排查流程,并指出未来优化方向应包括提升芯片抗干扰能力、开发智能自适应驱动程序等。该手册为开发者提供了从基础原理到实际问题的全面指导,能有效缩短故障排查时间,确保显示系统稳定运行。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 658

Java Set集合详解:HashSet类、TreeSet 类

Set 集合也实现了 Collection 接口,它主要有两个实现类:HashSet 类和 TreeSet类。Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合,集合中不能包含重复的对象,并且最多只允许包含一个 null 元素。 HashSet 类 HashSet 类是按照哈希算法来存储集合中的元素,使用哈希算法可以提高集合元素的存储速度,当向 Set 集合中添加一个元素时,H...

jijiangpeng的博客 823

【2023年】云计算比赛——金砖挑战赛正式题

文章摘要 本文详细记录了OpenStack私有云平台与Kubernetes容器云平台的部署与运维过程,涵盖环境初始化、组件安装、服务配置及自动化运维等关键任务。主要内容包括: OpenStack部署 环境初始化(主机名、Yum源、FTP服务等) 核心组件安装(Keystone、Glance、Nova、Neutron等) 运维任务(安全组管理、镜像上传、存储服务配置等) Kubernetes集群搭建 节点配置(时间同步、免密登录) 容器运行时(Docker)与网络插件(Flannel)部署 Harbor私有仓

geekgold的博客 310

用 SAP XCO XLSX 模块优雅读 Excel:坐标、选择模式与实战案例全解析

SAP ABAP Cloud 中的 XCO XLSX 模块为 Excel 文件处理提供了官方解决方案。文章介绍了三个核心概念:通过 XCO_CP_XLSX=>DOCUMENT 获取文档句柄;使用 CL_XCO_XLSX_COORDINATE 坐标系统定位单元格;利用 Selection Pattern 精确读取数据区域。这些功能在 RAP 批量导入等业务场景中尤为实用,相比传统方案更加简洁可靠。文章还分享了真实项目中的最佳实践,如动态列定位和相对偏移技巧,帮助开发者构建更健壮的 Excel 导入逻辑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 190

【Java】常用类方法记录

Java常用类方法记录,当前已记录:Arrays类、ArrayList类、HashMap类、HashSet类、Math类、String类、StringBuilder类

九圣残炎的编程博客 1441

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【JAVA】HashSet 详解

HashSet 详解

weixin_37559642的博客 2017

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java基础之HashSet详解

HashSet是基于HashMap实现的一个单列存储的集合类,将所有的数据存在HashMap的key值中,而value全部使用一个Object对象存储。继承了AbstractSet类,实现了Set接口、Cloneable接口和Serializable接口,所以HashSet是支持克隆和序列化的。HashSet的方法实现都非常简单,直接使用封装的HashMap来操作数据,真正执行的是HashMap的方法。

Lxn2zh的博客 2108

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java类HashSet常用API详解(附运行实例)

HashSet - 测试类 package HashSet_UtilityClass; import java.util.*; /** * HashSet测试类 */ public class HashSetTest { public static void main(String[] args) { // 向集合中添加一个元素,若以存在该元素则不予添加 HashSet<String> stuSet = new HashSet<Strin

WanAkiko. 1322

【JAVA】java常用类库和数据结构

1.常用类库 1.1.时间 1.1.1.Date类 可以看到date2的日期和星期都比date1减一天(往前算一天) 比较两个日期的先后: 可以用getTime()获取两个日期的毫秒数,将问题转换为比较两个毫秒数的大小 1.1.2.DateFormat类 1.2.字符串 1.2.1.概述——CharSequence接口 1.2.2.String类 1.2.3.StringBuffer/StringBuilder类 2.数据结构 2.1.集合概览 2.2.Collection接口

qq_51302485的博客 673

JAVA中hashset集合详解

HashSet 中的元素实际上是对象,一些常见的基本类型可以使用它的包装类。 下图常见包装类 HashSet 类位于 java.util 包中,使用前需要引入它,语法格式如下: import java.util.HashSet; // 引入 HashSet 类 hashset类里有很多方法 添加元素 HashSet 类提供类很多有用的方法,添加元素可以使用 add() 方法: 实例 // 引入 HashSet 类 importjava.util.HashSet; pu...

qq_45794962的博客 6557

Java 常用类详解:从基础到实战,提升开发效率的必备知识

本文系统介绍了Java开发中常用的核心类及其应用场景。字符串处理推荐使用StringBuilder(单线程)和StringBuffer(多线程);日期时间处理建议采用Java8的LocalDateTime等新API;集合类根据需求选择ArrayList(动态数组)、HashMap(键值对)或HashSet(去重);工具类Arrays和Collections可简化数组与集合操作。文章通过实例演示了这些类的关键方法,强调熟练掌握这些基础类能显著提升开发效率,建议结合实践深入理解其底层实现原理。

Pretend________的博客 1214

Java 集合中的 HashSet 类和 TreeSet 类

HashSet 类和 TreeSet 类是 Java 集合中 Set 接口的两个重要实现。HashSet 类由哈希表支持,不维护元素的任何顺序,为添加、删除和包含等基本操作提供恒定时间性能,假设哈希函数将元素正确分散到存储桶中。它通过不允许重复元素来确保唯一性,在需要快速访问和检索时特别有用。另一方面,TreeSet 类由树结构(特别是红黑树)支持,并根据其自然顺序或指定的比较器按排序顺序维护其元素。TreeSet 类为基本操作(添加、删除和包含)提供有保证的 log(n) 时间成本。

技术探索驿站 1012
上一篇: Java常用类:HashMap类详解
下一篇: 集合的区别、适用场景以及如何排序(List,Map,Set)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值