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
不保证元素的顺序)