0

我正在做一个练习,我需要实现一个类,我很难理解解释。

这是解释/练习:

 * 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;
}

这就是我自己尝试做的事情,但是我很难把我的头绕在我应该做的事情上。

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

感谢任何可能的帮助,

鲍比。

4

2 回答 2

5

实际上,您的答案与提供的答案并没有太大的不同,它会添加所有给定的元素。你没有考虑什么?

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

请记住,根据定义,一个 Set 不能有重复的元素,所以布尔值只是为了让调用者知道某些东西是否真的发生了变化。

于 2013-01-28T14:51:11.927 回答
3

您的代码与提供的答案之间的区别在于您的代码无条件返回true,即使没有任何变化(与返回集合是否已更改的规定要求相反)。提供的答案实际上也有一点缺陷,因为它只返回最后一个对象是否被接受(即它可以返回假阴性),该行应该是changed = changed || add(it.next());.

于 2013-01-28T14:52:08.277 回答