簡體   English   中英

為什么AbstractCollection不實現iterator()?

[英]Why doesn't AbstractCollection implement iterator()?

來自: 收藏框架

“ AbstractCollection類為所有方法提供了實現,但iterator()和size()方法除外,它們在適當的子類中實現”

任何人都可以弄清楚iterator()沒有默認行為的原因嗎? 我可以從以下問題中了解為什么size()不是默認值: 為什么AbstractCollection不實現size()?

會怎么辦?

iterator()方法是派生類實際提供數據的方式。
AbstractCollection實現的所有方法都使用size()iterator()實際實現所提供的數據來簡單地執行適當的邏輯。

AbstractCollection不知道數據的存儲方式,因此iterator()實現有兩種選擇:

  • 使其成為一種抽象方法,或者
  • UnsupportedOperationException拋出它對許多其他方法(例如addremove

只有第一種解決方案才有意義:集合必須至少允許讀取,而寫入可能是可選的。

考慮三個不同的集合:一個基於數組的列表,一個鏈表,以及一個基於樹的排序列表。 基於數組的集合的迭代器需要根據索引位置來確定誰可以訪問每個元素。 鏈表的迭代器將需要知道如何遍歷元素之間的鏈接。 基於樹的集合的迭代器將需要知道如何遍歷樹(例如,廣度優先或深度優先)。 您會看到所有這些行為都是非常不同的,並且是特定於實現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM