关于HashSet的一些疑问

最近使用HashSet时,才知道对于HashSet的类我一点也不了解。
HashSet 是不可以有重复元素的,那调用add()方法时,它的内部是怎么判断这个对象是否在该HashSet中存在的呢?
比如:

        HashSet<Person> set = new HashSet<Person>();
        Person p1 = new Person("tom", 12);
        Person p2 = new Person("tom", 12);
        set.add(p1);
        set.add(p2);
      

请大家指点!

如果要保证set里面不出现重复元素,必须要按照自己的需求定义两个对象相等的规则,即在Person类中覆盖掉Object中的equal和hashcode方法。

调用hashmap的put方法,直接覆盖

去掉重复元素的算法应该有很多种,至于哪种算法效率高,JDK是怎么实现的,可以看一下源码,应该不会很复杂

用这个方法:
public boolean contains(Object o)
说明:
Returns true if this set contains the specified element. More formally, returns true if and only if this set contains an element e such that (o==null ? e==null : o.equals(e)).