JDK17源码系列-AbstractSet接口源码解读

JDK17源码系列-AbstractSet接口源码解读

1、AbstractSet类图结构
在这里插入图片描述
2、AbstractSet是个抽象集合类

  • equals() 方法 比较两个集合是否相等
public boolean equals(Object o) {
   if (o == this)  // 如果两个集合的引用(即内存地址)相同,返回true
        return true;

    if (!(o instanceof Set))  // 如果目标集合未实现Set接口,则返回false
        return false;
    Collection<?> c = (Collection<?>) o;
    if (c.size() != size())  // 如果当前集合大小与目标集合大小不相等,则返回false
        return false;
    try {
        // containsAll 存在父类AbstractCollection类中
        return containsAll(c); // 当前集合是否完全包含(比较集合中每一个元素)目标集合,如果全包含,返回true,否则返回false
    } catch (ClassCastException | NullPointerException unused) {
        return false;
    }
}
  • hashCode() 返回集合的哈希码值
public int hashCode() {
    int h = 0;
     Iterator<E> i = iterator();
     // 每个非空元素的哈希码值之和
     while (i.hasNext()) {
         E obj = i.next();
         if (obj != null)
             h += obj.hashCode();
     }
     return h;
 }
  • public boolean removeAll(Collection<?> c) 删除目标集合
public boolean removeAll(Collection<?> c) {
   Objects.requireNonNull(c);
    boolean modified = false;

    if (size() > c.size()) {     // 如果当前集合大小大于目标集合c,则遍历目标集合c,从当前集合中删除目标集合中的每个元素
        for (Object e : c)
            modified |= remove(e);
    } else {
       // 如果当前集合大小<=目标集合,则遍历当前集合,判断目标集合中是否包含遍历的元素,如果包含,则从当前集合中删除该元素
        for (Iterator<?> i = iterator(); i.hasNext(); ) {
            if (c.contains(i.next())) {
                i.remove();
                modified = true;
            }
        }
    }
    return modified;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值