首先了解set集合元素不重复的判断规则:哈希值相同&&(地址值相同 || equals方法比较相同)则为相同元素,源码如下:
set集合元素新增的流程:
1、先计算元素的哈希值;
2、将哈希值与数组长度作比较,确定新增元素的索引值;源码如下,如果该索引值位置没有元素,直接新增元素;
3、该索引值位置如果有元素,根据判断规则判断是否同一个元素,如果不是,新增元素。源码比较复杂,整体判断流程就是上面提到的地址值比较和equals方法比较的步骤。
通过查看源码也可以发现set接口系列底层用的就是map接口。set判断不重复的规则和map接口中的k不能重复的判断规则相同,是同一套代码。