2012年3月29日星期四

位或操作(|)在循环中的使用





AbstractSet.java的代码中发现这句


public boolean removeAll(Collection<?> c) {
    boolean modified = false;
    if (size() > c.size()) {
        for (Iterator<?> i = c.iterator(); i.hasNext(); )
            modified |= remove(i.next());//位或操作,只要又一次remove返回true,结果即为true
    } else {
        for (Iterator<?> i = iterator(); i.hasNext(); ) {
            if (c.contains(i.next())) {
                i.remove();
                modified = true;
            }
        }
    }
    return modified;
}


PS:这个代码还有点可以借鉴的地方是,循环前比较两个集合的长度大小,递归小的那个集合

没有评论:

发表评论