为什么AbstractCollection没有实现size()?

Ada*_*ter 5 java size collections

AbstractCollection在进行子类化时,我仍然必须实现size(),即使(我相信)有一个合理的正确(虽然不是高性能)默认实现:

public int size() {
    int count = 0;

    for (Iterator<E> i = iterator(); i.hasNext();) {
        i.next();
        count++
    }

    return count;
}
Run Code Online (Sandbox Code Playgroud)

为什么设计师不包含默认实现size()?他们是否试图强迫开发人员有意识地考虑这种方法,希望开发人员能够提供性能优于默认值的实现?

Jon*_*eet 11

我怀疑你的最后一句是真正的原因.在对抽象类进行子类化时,有时候只能覆盖抽象方法.我希望几乎每个实现都有一个比迭代更好的实现 - 所以如果你想要几乎所有人都覆盖一个方法,那么不提供一个基础(慢)实现可能是个好主意.它只是减少搞砸的机会:)


Joa*_*uer 5

虽然这是一个可能的默认实现,但它不一定是好的(甚至是理智的).

几乎所有通用Collection实现中,都有O(1)方法来查找大小.通常只需查询一个简单的字段即可.

这应该是实施.在极少数情况下,情况并非如此,实现仍然可以回溯到您的示例代码(或以不同方式实现).