目录
3.2、HashSet集合重写equals()和hashCode()方法
1、Set集合的特点
-
元素存取无序
-
没有索引、只能通过迭代器或增强for循环遍历
-
不能存储重复元素
2、Set集合特点解析
Set集合底层基于哈希表,而哈希表通过哈希值得到,正因为不同对象的哈希值是不同的所以才会导致Set集合不能存储重复元素,所以需要简单了解一下哈希值的内容。
2.1、哈希值
哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值。
如何获取哈希值?Object类中的public int hashCode():返回对象的哈希码值
哈希值的特点:
-
同一个对象多次调用hashCode()方法返回的哈希值是相同的
-
默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
set接口在底层代码实现是根据一个算法算出存入的每个数据的hash值。每个存入的hash值都不一样。然后调用equals方法比较数据之间的hash值。也就是比较对象的地址值而不是内容值,那么地址值如果相同就存不进去。而Set集合无序、无索引的特点也因此而来,存储遍历和取出遍历不能保证一致。
2.2、哈希值保证元素唯一性的图解
2.3、哈希表形成过程
3、HashSet集合
3.1、HashSet集合的特点
-
底层数据结构是哈希表
-
对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
-
没有带索引的方法,所以不能使用普通for循环遍历
-
由于是Set集合,所以是不包含重复元素的集合