Java.数据结构.HashSet

目录

[1 基本概念](#1 基本概念)

[2 数据结构](#2 数据结构)

[3 常用操作](#3 常用操作)

[3.1 add(E e):向HashSet中添加元素](#3.1 add(E e):向HashSet中添加元素)

[3.2 remove(Object o):从HashSet中移除元素](#3.2 remove(Object o):从HashSet中移除元素)

[3.3 contains(Object o):判断HashSet中是否包含指定元素](#3.3 contains(Object o):判断HashSet中是否包含指定元素)

[3.4 size():返回HashSet中元素的个数](#3.4 size():返回HashSet中元素的个数)

[3.5 isEmpty():判断HashSet是否为空](#3.5 isEmpty():判断HashSet是否为空)

[4 优缺点:](#4 优缺点:)

[5 注意事项](#5 注意事项)


1 基本概念

  • 它只能存储唯一元素,不允许存储重复的元素。
  • HashSet允许存储null值,但只能存储一个null元素。

2 数据结构

  • HashSet内部使用HashMap来实现,具体来说是使用一个数组加链表(或红黑树)的方式来存储元素。
  • HashSet根据元素的hashCode值将其分配到不同的桶中,将具有相同hashCode值的元素存储在同一个桶中,然后使用链表(或红黑树)来处理hashCode冲突。

3 常用操作

3.1 add(E e):向HashSet中添加元素
java 复制代码
HashSet<String> set = new HashSet<>();  
set.add("apple");  
set.add("banana");

注意 :add 方法实际上是 boolea 类型 ,如果你要添加的 value 已经存在那么它将添加失败,返回False,反之返回 True,并不会像 HashMap 中的 put 一样后值覆盖前值。

3.2 remove(Object o):从HashSet中移除元素
java 复制代码
set.remove("banana");
3.3 contains(Object o):判断HashSet中是否包含指定元素
java 复制代码
boolean contains = set.contains("apple");  
System.out.println(contains);  // 输出: true
3.4 s``ize():返回HashSet中元素的个数
java 复制代码
int size = set.size();  
System.out.println(size);  // 输出: 1 (假设已移除banana)
3.5 isEmpty()判断HashSet是否为空
java 复制代码
boolean isEmpty = set.isEmpty();  
System.out.println(isEmpty);  // 输出: false (假设集合中有元素)

4 优缺点:

优点:快速查找(平均时间复杂度为O(1))、高效插入和删除操作

缺点:非线程安全、不保证顺序

5 注意事项

HashSet不提供 get()方法来查找集合中指定的元素,但可以使用 contains()方法来判断集合中是否包含指定元素。

相关推荐
long31630 分钟前
封装(Encapsulation)
java·人工智能·ai·ai编程
SomeB1oody30 分钟前
【RustyML入门】7.2. 深入模型持久化
开发语言·后端·机器学习·rust·教程
yaoxin52112332 分钟前
502. Java 反射 - 编写 MessageInterceptor 类
java·开发语言
wuyk55535 分钟前
Python零基础入门第五章:元组Tuple(不可变容器详解、列表与元组区别)
开发语言·python
风流 少年36 分钟前
Spring AI 2.0:阿里云百炼平台(工作流应用)
java·后端·spring
长谷深风11141 分钟前
AI Tool 设计:粒度、参数与错误恢复怎么做
java·大数据·人工智能·ai agent·agent工作流·智能体设计·ai产品设计
2601_9657984742 分钟前
Build a Fast, High-Ranking Restaurant Website with Rolanda Theme
开发语言·ios·swift
caimouse1 小时前
ReactOS 窗口系统分析(25):标题栏显示与系统按钮 — nonclient.c 标题栏专题
c语言·开发语言
诺伦1 小时前
Rust 错误处理实战:从 unwrap 到优雅 Result 的进阶之路
开发语言·后端·rust
caimouse1 小时前
ReactOS 窗口系统分析(14):计时器/属性/加速键/热键 — timer.c + prop.c + accelerator.c + hotkey.c
c语言·开发语言·reactos