HashSet使用了哈希表(Hash Table)数据结构,它是一种以键-值(Key-Value)存储数据的结构,可以快速的插入或查找元素。在HashSet中,元素被添加进来时,首先会根据元素的HashCode值将元素放入对应的桶中,如果桶中已经存在元素,则通过equals方法进行比较,如果返回true则不再添加,否则添加进去。因此,HashSet中保证元素不重复的机制就是通过哈希表中的HashCode和equals方法实现的。
具体来说,当需要向HashSet中添加一个元素时,HashSet会调用该元素的hashCode()方法得到元素的哈希值,然后根据哈希值找到相应的桶,如果该桶中已经存在元素,则调用该元素的equals()方法和桶中的所有元素进行比较,如果有任意一个元素和要添加的元素equals()方法返回true,则认为这个元素已经存在,不再添加;否则将该元素添加到桶中。
因此,在使用HashSet时,需要保证元素的HashCode和equals方法的正确性,即相同的元素必须具有相同的HashCode值,并且equals()方法返回true。否则就可能导致相同的元素被重复添加。