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
}
相关推荐
WX-bisheyuange21 小时前
基于Spring Boot的民宿预定系统的设计与实现
java·spring boot·后端·毕业设计
码界奇点21 小时前
Java设计模式精讲从基础到实战的常见模式解析
java·开发语言·设计模式·java-ee·软件工程
四维碎片21 小时前
【Qt】配置安卓开发环境
android·开发语言·qt
西游音月21 小时前
(7)框架搭建:Qt实战项目之主窗体导航栏、状态栏
开发语言·qt
3***499621 小时前
Swift Experience
开发语言·ios·swift
iFlow_AI21 小时前
iFlow CLI Hooks 「从入门到实战」应用指南
开发语言·前端·javascript·人工智能·ai·iflow·iflow cli
Maybyy1 天前
Chart.js图标绘制工具库
开发语言·javascript·ecmascript
苏小瀚1 天前
算法---FloodFill算法和记忆化搜索算法
数据结构·算法·leetcode
苏小瀚1 天前
算法---二叉树的深搜和回溯
数据结构·算法
1***s6321 天前
Python爬虫反爬策略,User-Agent与代理IP
开发语言·爬虫·python