Set中添加数据和删除数据的判重方式

  Set集合中可以使用add(Object o)方法向其中添加数据,但是与List集合不同的是,Set中不允许添加重复的数据,那么Set中判重的方式是什么呢?一句话概括就是:当且仅当Set集合中没有包含满足(o==null ? e==null : o.equals(e))条件的元素e时才能将元素o添加到集合中。

  由三目运算可知,当要添加的数据为空时,只要原来set集合中没有空值就可以向其中添加,而若原本有空值就不可添加。当要添加的数据不为空时,则要用Set中的equals方法进行判重。

   那么重点来了,Set中的equals方法是啥呢?打开源代码,我们会找到

  public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

   继续往下找,我们会找到HashSet中的putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict)方法,然后阅读这个方法,我们会找到判重的方法为p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))。这就很清楚了,只要新加入的元素满足与原有的元素满足:

1、hash值相同并且元素地址相同

  或者

2、hash值相同并且满足o所对应数据类型的equals方法的返回值为TRUE

就可认为o与原有的元素是重复的,不可重复添加,其余情况就可添加进Set集合中了。

你可能感兴趣的:(Set中添加数据和删除数据的判重方式)