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
}
相关推荐
benbenAItalk6 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl6 小时前
Java学习二 基本语法2, 算术运算符
java·学习
2601_966949656 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
niucloud-admin6 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885726 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
吞下星星的少年·-·6 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
滕州市燕猫虎计算机科技工作室个体工商户6 小时前
Java锁
java·开发语言
多加点辣也没关系7 小时前
JavaScript|第31章:表单与控件
开发语言·javascript·ecmascript
菜鸟~noob2337 小时前
【电子战】 第09篇:阵列信号处理——波束形成、MVDR、MUSIC【含matlab代码】
开发语言·matlab·信号处理
ocean21037 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文