30s搞懂HashSet基本原理与方法

目录

1.原理

[1.1 基于HashMap实现](#1.1 基于HashMap实现)

[1.2 实现了Set接口](#1.2 实现了Set接口)

[1.3 实现了序列化和可克隆化](#1.3 实现了序列化和可克隆化)

2.实现操作

[2.1 添加元素add()](#2.1 添加元素add())

[2.2 删除指定单个元素remove()](#2.2 删除指定单个元素remove())

[2.3 删除所有元素clear()](#2.3 删除所有元素clear())

[2.4 判断是否包含元素contains()](#2.4 判断是否包含元素contains())

[2.5 判断是否为空isEmpty()](#2.5 判断是否为空isEmpty())

[2.6 获得大小size()](#2.6 获得大小size())

[2.7 遍历HashSet](#2.7 遍历HashSet)

[2.7.1 使用iterator()迭代器](#2.7.1 使用iterator()迭代器)

[2.7.2 for循环遍历](#2.7.2 for循环遍历)


1.原理

1.1 基于HashMap实现

HashSet是个存数据的集合,在HashSet中只能输入一个值。

所以允许空值(默认null)

不是线程安全的(hashMap也不安全)

java 复制代码
private transient HashMap map;

// Constructor - 1
// All the constructors are internally creating HashMap Object.
public HashSet()
{
    // Creating internally backing HashMap object
    map = new HashMap();
}

// Constructor - 2
public HashSet(int initialCapacity)
{
    // Creating internally backing HashMap object
    map = new HashMap(initialCapacity);
}

// Dummy value to associate with an Object in Map
private static final Object PRESENT = new Object();

1.2 实现了Set接口

与Set一样不允许存入重复数据,而且数据是随机存取(无序的)

1.3 实现了序列化和可克隆化

便利与数据的直接存储和取出利用

2.实现操作

2.1 添加元素add()

注意重复的元素不会存入

java 复制代码
hs.add("Geek");

2.2 删除指定单个元素remove()

java 复制代码
hs.remove("B");

2.3 删除所有元素clear()

java 复制代码
hs.clear();

2.4 判断是否包含元素contains()

返回值为boolean,若存在元素返回true,为空返回false

java 复制代码
 boolean isNotEmpty = hs.contains();

2.5 判断是否为空isEmpty()

与contains恰好相反

java 复制代码
 boolean con = hs.isEmpty();

2.6 获得大小size()

java 复制代码
int size = hs.size();

2.7 遍历HashSet

2.7.1 使用iterator()迭代器

java 复制代码
/**获取对应set的迭代器*/
Iterator itr = hs.iterator();
while (itr.hasNext()){
 //TODO
}

2.7.2 for循环遍历

java 复制代码
for (String s : hs){
    //TODO
}
相关推荐
万水千山走遍TML2 分钟前
JavaScript性能优化
开发语言·前端·javascript·性能优化·js·js性能
桦说编程18 分钟前
警惕AI幻觉!Deepseek对Java线程池中断机制的理解有误
java·后端·deepseek
jackson凌30 分钟前
【Java学习笔记】选择结构
java·笔记·学习
极客先躯32 分钟前
高级java每日一道面试题-2025年4月21日-基础篇[反射篇]-如何使用反射获取一个类的所有方法?
java·面试·反射·基础篇
掉鱼的猫36 分钟前
开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!
java·mcp
佩奇的技术笔记38 分钟前
Java学习手册:HTTP 协议基础知识
java·http
博弈美业系统Java源码41 分钟前
连锁美业管理系统「数据分析」的重要作用分析︳博弈美业系统疗愈系统分享
java·大数据·前端·后端·创业创新
秋野酱42 分钟前
基于javaweb的SpringBoot扶农助农平台管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
暮乘白帝过重山1 小时前
为什么Spring中@Bean注解默认创建单例Bean
java·spring
三体世界1 小时前
Linux 管道理解
linux·c语言·开发语言·c++·git·vscode·visual studio