HashSet是一个不允许重复元素出现的集合,是通过哈希表实现的。添加元素的时候,会计算元素的HashCode值,通过HashCode值将元素存储到对应的桶中。如果多个元素的HashCode值一样,则会组成一个链表。
当需要添加元素时,会计算元素的HashCode值,根据HashCode值来确定元素存放到哪一个桶中,如果该桶中已存在元素,则检查该元素和已有元素是否相同,如果相同则不加入该元素。
HashSet检查元素是否重复的方法是:先进行哈希值比较,然后调用equals方法进行元素的比较。
首先,HashSet的元素已经重写了HashCode方法和equals方法。当两个元素的HashCode值不同,则说明它们不在同一个桶中,HashSet会直接将它们视为不同的元素;当两个元素的HashCode值相同时,则比较他们的equals方法。如果equals方法返回true,则HashSet会认为这两个元素是重复的,不加入该元素。