“AbstractCollection类提供了所有方法的实现,但iterator()和size()方法除外,它们在相应的子类中实现”
有没有人能说清楚iterator()没有默认行为的原因? 我可以看到为什么size()不是此问题的默认值:Why does AbstractCollection not implement size()?
答案 0 :(得分:6)
它会做什么?
iterator()
方法是派生类实际提供数据的方式
AbstractCollection
实现的所有方法都只使用size()
和iterator()
中实际实现提供的数据执行适当的逻辑。
答案 1 :(得分:2)
AbstractCollection
不知道数据是如何存储的,因此iterator()
实现有两种选择:
UnsupportedOperationException
方式用于许多其他方法,例如add
或remove
。只有第一种解决方案才有意义:集合必须至少允许阅读,而写作可能是可选的。
答案 2 :(得分:0)
考虑三个不同的集合:基于数组的列表,链表,让我们说基于树的排序列表。基于数组的集合的迭代器需要知道根据它的索引位置访问每个元素的人。链表的迭代器需要知道如何遍历元素之间的链接。并且基于树的集合的迭代器需要知道如何遍历树(例如,广度优先或深度优先)。您可以看到所有这些行为都非常不同,并且是特定于实现的。