Collection的Set接口实现与HashSet类

2024-10-14 04:01:03

1、Set接口是Collection的子接口。Set接口存放的元素是无序的且不包含重复的元素,类似于数学概念的集合,集合中不允许有重复元素。Set接口有三个常用的实现类,分别是HashSet、LinkedHashSet、TreeSet,本节主要介绍HashSet实现类。HashSet是Set接口实现类之一,使用较为广泛,它不保存元素的加入顺序,并且不允许存储重复的元素。也就是当容器中已经存储一个相同的元素时,无法再添加一个完全相同的元素。下面先通过一个应用实例对HashSet的用法有个具体了解。

Collection的Set接口实现与HashSet类

3、从上图可以看出,HashSet藜局腑载添加的顺序与迭代显示的结果顺序并不一致,这也验证了HashSet存储元素的无序特征。有的同学可能会问,前面学过的数组、上节中例子代码的ArrayList都与加入元素的顺序相关,为什么HashSet与加入的元素顺序无关了呢?其实,HashSet类是根据元素的哈希码进行存储的,HashSet根据每个存储对象的哈希码值(调用hashCode方法获得),用固定的算法算出它的存储索引,把存储对象存放在一个叫做散列表的相应位置中,如果对应的位置没有其它元素,就只需要直接存入;如果该位置已经有元素了,就会将新对象跟该位置的所有对象进行比较(调用equals()方法),以查看容器中是否已经存在该对象,若不存在,就存放该对象,若已经存在,就直接使用该对象。

Collection的Set接口实现与HashSet类Collection的Set接口实现与HashSet类Collection的Set接口实现与HashSet类
猜你喜欢