了解Java解释

时间:2013-01-28 14:42:58

标签: 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 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;
}

感谢任何可能的帮助,

波比。

2 个答案:

答案 0 :(得分:5)

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

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

请记住,根据定义,Set不能包含重复的元素,因此布尔值就是让调用者知道某些内容是否实际发生了变化。

答案 1 :(得分:3)

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