1

From : Collections Framework

"the AbstractCollection class provides implementations for all the methods, except for the iterator() and size() methods, which are implemented in the appropriate subclass"

Could anyone make clear the reason why no default behavior for iterator() ? I could see why size () is not default from this question : Why does AbstractCollection not implement size()?

4

3 回答 3

6

What would it do?

The iterator() method is how the derived class actually provides the data.
All of the methods that AbstractCollection implements simply perform the appropriate logic using the data provided by the actual implementation in size() and iterator().

于 2012-08-12T02:37:24.703 回答
2

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

  • 使其成为抽象方法,或
  • 抛出UnsupportedOperationException它对许多其他方法的方式,例如addor remove

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

于 2012-08-12T02:41:56.807 回答
0

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

于 2012-08-12T16:59:05.500 回答