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

时间:2012-08-12 02:34:26

标签: java collections

来自:Collections Framework

“AbstractCollection类提供了所有方法的实现,但iterator()和size()方法除外,它们在相应的子类中实现”

有没有人能说清楚iterator()没有默认行为的原因? 我可以看到为什么size()不是此问题的默认值:Why does AbstractCollection not implement size()?

3 个答案:

答案 0 :(得分:6)

它会做什么?

iterator()方法是派生类实际提供数据的方式 AbstractCollection实现的所有方法都只使用size()iterator()中实际实现提供的数据执行适当的逻辑。

答案 1 :(得分:2)

AbstractCollection不知道数据是如何存储的,因此iterator()实现有两种选择:

  • 将其设为抽象方法,或
  • UnsupportedOperationException方式用于许多其他方法,例如addremove

只有第一种解决方案才有意义:集合必须至少允许阅读,而写作可能是可选的。

答案 2 :(得分:0)

考虑三个不同的集合:基于数组的列表,链表,让我们说基于树的排序列表。基于数组的集合的迭代器需要知道根据它的索引位置访问每个元素的人。链表的迭代器需要知道如何遍历元素之间的链接。并且基于树的集合的迭代器需要知道如何遍历树(例如,广度优先或深度优先)。您可以看到所有这些行为都非常不同,并且是特定于实现的。