当前位置: 首页 > news >正文

HashSet 概述

1. HashSet 概述

HashSet 是 Java 集合框架中 Set 接口的一个实现类,它存储唯一元素,即集合中不会有重复的元素。HashSet 基于哈希表(实际上是 HashMap 实例)来实现,不保证元素的顺序,并且允许存储 null 元素,但最多只能有一个 null 元素。

2. 泛型使用

在 HashSet<Object> 里,<Object> 是泛型的运用。泛型能让你在创建集合时指定集合所存储元素的类型。这里指定的类型是 Object,意味着该 HashSet 可以存储任意类型的对象。如果没有指定泛型,默认存储的是 Object 类型,不过从 Java 5 开始,推荐使用泛型,这样能在编译时进行类型检查,减少运行时错误。

3. 代码解释

HashSet<Object> set = new HashSet<>();

  • HashSet<Object>:声明了一个 HashSet 变量 set,此集合存储的元素类型为 Object
  • new HashSet<>():创建了一个 HashSet 实例。尖括号里为空,这是 Java 7 引入的菱形语法,编译器能够依据变量声明时指定的泛型类型来推断出实例化时的泛型类型。

4. 常用方法

添加元素
set.add("element");
检查元素是否存在
boolean contains = set.contains("element");

contains 方法用于检查集合中是否包含指定元素,若包含则返回 true,反之返回 false

删除元素
set.remove("element");
获取集合大小
int size = set.size();
遍历集合
for (Object element : set) {System.out.println(element);
}

可以使用增强 for 循环来遍历 HashSet 中的元素。

import java.util.HashSet;public class HashSetTest {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();set.add("111");set.add("222");set.add(null);System.out.println(set);}
}

在给出的代码里,直接打印 HashSet 实例 set 时输出的并非地址,这和 Java 中对象的 toString() 方法的实现机制有关。

1. toString() 方法的作用

在 Java 里,所有类都直接或者间接地继承自 Object 类,而 Object 类有一个 toString() 方法。这个方法的默认实现会返回对象的字符串表示,其格式为 类名@十六进制哈希码,这通常被视作对象的地址。不过,很多类会重写 toString() 方法,从而提供更具可读性的字符串表示。

2. HashSet 重写了 toString() 方法

HashSet 类重写了 Object 类的 toString() 方法。当你直接打印 HashSet 对象时,Java 会调用该对象的 toString() 方法。HashSet 的 toString() 方法会把集合里的所有元素以逗号分隔,并用方括号 [] 括起来显示

  • System.out.println(set); 这行代码实际上调用了 set.toString() 方法。由于 HashSet 重写了 toString() 方法,所以输出的是集合中元素的字符串表示,而不是对象的地址。
  • 输出结果可能类似 [null, 111, 222](注意:HashSet 不保证元素的顺序)

相关文章:

  • 【实用技巧】如何无损去除图片水印?
  • HashMap的源码解析
  • ZYNQ-GPIO之MIO中断
  • 【kafka初学】启动执行命令
  • XMOS空间音频——在任何设备上都能提供3D沉浸式空间音频且实现更安全地聆听
  • 哈工大李治军《操作系统》进程同步与信号量笔记
  • HOJ.编程语言管理系统
  • 肯·汤普逊:UNIX之父与现代操作系统的开路人
  • Linux解压tar.gz包的正确姿势(附赠防抓狂指南)
  • 14-DevOps-快速部署Kubernetes
  • ‌Linux trap 命令详解
  • 颠覆传统!LSTM+transformer上大分!参数直降45.5%,精度远超SOTA!
  • 测试模版x
  • 【HFP】蓝牙HFP协议中音频连接转移与拨号功能的深度解析
  • 极域教师管理CMD命令操作
  • 数智飞轮:AI时代企业增长的核心密码
  • MYSQL 常用数值函数 和 条件函数 详解
  • 微信小程序蓝牙连接打印机打印单据完整Demo【蓝牙小票打印】
  • 赶紧收藏!教您如何用 GitHub 账号,获取永久免费的 Docker 容器!!快速搭建我们的网站/应用!
  • Shell 脚本入门:从零开始写自动化脚本
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 影子调查|23岁男子驾照拟注销背后的“被精神病”疑云
  • 张译、惠英红分获第二十届中国电影华表奖优秀男、女演员奖
  • 三部门提出17条举措,全力促进高校毕业生等青年就业创业
  • 美银证券前董事总经理胡霁光履新,任摩根士丹利中国区副主席
  • 上海黄浦一季度实到外资总量全市第二,同比增速领先全市