理解Java解释

理解Java解释,java,Java,我正在做一个练习,我需要实施一个课程,我很难理解这个解释 以下是解释/练习: * Adds all of the elements in the specified set, for which it is * possible, to this set. * post: all elements, for which it is possible, in the * specified set are added to this set. * @return true if this

我正在做一个练习,我需要实施一个课程,我很难理解这个解释

以下是解释/练习:

 * Adds all of the elements in the specified set, for which it is
 * possible, to this set.
 * post: all elements, for which it is possible, in the
 * specified set are added to this set.
 * @return true if this set changed as a result of the call
这就是答案

public boolean addAll(SimpleSet<? extends E> s) {
    Iterator<? extends E> it = s.iterator();
    boolean changed = false;
    while (it.hasNext()) {
        changed = add(it.next());
    }
    return changed;
}

<代码>公文布尔AdALL(SimeSeT

),事实上,你的答案与所提供的答案不太不同,它将添加所有的元素。你没有考虑什么?

根据该方法的定义,它应该返回一个布尔值,指示集合是否因添加元素而发生更改。在您的实现中,您只返回true,这意味着您不考虑尝试添加的元素何时已存在于集合中。尽管给定的实现仅检查这是最后一个也不正确的


请记住,根据定义,集合不能有重复的元素,因此布尔值仅用于让调用者知道是否有实际更改。

您的代码和提供的答案之间的区别是,您的代码无条件返回
true
,即使没有任何更改(与规定的返回集合是否已更改的要求相反)。提供的答案实际上也有轻微缺陷,因为它只返回最后一个对象是否已被接受(即,它可以返回假阴性),该行应该是
changed=changed | | add(it.next())什么让你困惑?你的答案与提供的答案没有太大的不同…提供的答案是错误的。如果集合
s
是空的,或者基础
add
实现对所有项目返回
false
,方法应该返回
false
,因为集合没有改变。我明白了,我想我开始了现在我想了解这一部分。但是我如何测试并查看实现是否工作呢?比如,@test public final void testAddAll(){….}我在JUnit中运行它作为旁注
public boolean addAll(SimpleSet<? extends E> s){
        Iterator<? extends E> itr = s.iterator();
        while(itr.hasNext()){
            add(itr.next());
        }
    return true;
}