來源:Collections FrameworkAbstractCollection爲什麼不實現iterator()?
「的類AbstractCollection類提供了所有方法,除迭代器(),大小()方法,這些方法在適當的子類實現」
任何人都可以清楚的原因爲什麼iterator()沒有默認行爲? 我可以看到爲什麼size()不是默認的這個問題:Why does AbstractCollection not implement size()?
來源:Collections FrameworkAbstractCollection爲什麼不實現iterator()?
「的類AbstractCollection類提供了所有方法,除迭代器(),大小()方法,這些方法在適當的子類實現」
任何人都可以清楚的原因爲什麼iterator()沒有默認行爲? 我可以看到爲什麼size()不是默認的這個問題:Why does AbstractCollection not implement size()?
它會做什麼?
iterator()
方法是派生類如何實際提供數據。
AbstractCollection
實現的所有方法都只是使用size()
和iterator()
中的實際實現提供的數據執行適當的邏輯。
的AbstractCollection
不知道的數據是如何存儲的,所以有兩種選擇爲iterator()
實現:
UnsupportedOperationException
它爲許多方式其他方法,如add
或remove
。只有第一種解決方案纔有意義:集合必須至少允許讀取,而寫入可能是可選的。
想想三個不同的集合:基於數組的列表,鏈表,以及基於樹的排序列表。基於數組的集合的迭代器需要知道根據索引位置訪問每個元素的人員。鏈表的迭代器需要知道如何遍歷元素之間的鏈接。而一個基於樹的集合的迭代器需要知道如何遍歷樹(例如寬度優先或深度優先)。您可以看到所有這些行爲都非常不同,並且都是特定於實現的。