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
}
相关推荐
saber_andlibert6 分钟前
TCMalloc底层实现
java·前端·网络
明月醉窗台6 分钟前
qt使用笔记六之 Qt Creator、Qt Widgets、Qt Quick 详细解析
开发语言·笔记·qt
wangjialelele10 分钟前
平衡二叉搜索树:AVL树和红黑树
java·c语言·开发语言·数据结构·c++·算法·深度优先
xuxie9912 分钟前
day 21 双向链表以及循环链表
数据结构·链表
m0_4811473315 分钟前
拦截器跟过滤器的区别?拦截器需要注册吗?过滤器需要注册吗?
java
lili-felicity17 分钟前
CANN性能调优与实战问题排查:从基础优化到排障工具落地
开发语言·人工智能
Coder_Boy_18 分钟前
基于SpringAI的在线考试系统-相关技术栈(分布式场景下事件机制)
java·spring boot·分布式·ddd
独自破碎E19 分钟前
【BISHI15】小红的夹吃棋
android·java·开发语言
冻感糕人~21 分钟前
【珍藏必备】ReAct框架实战指南:从零开始构建AI智能体,让大模型学会思考与行动
java·前端·人工智能·react.js·大模型·就业·大模型学习
啦啦啦_999926 分钟前
Redis实例-2
java