2015-02-07 66 views
3

所有的Java Collection都執行Iterable,所以他們必須提供Iterator,它指定了一個可選的方法remove()。在Iterator上調用remove()時,可以拋出UnsupportedOperationException如何知道集合的Iterator是否支持remove()?

如何知道Java標準庫中的Collection是否會返回支持remove()Iterator或者沒有運行代碼?

當然我期望這些信息位於類的remove()方法的Javadoc中,但是卻發現了一些指向超類和接口的鏈接。例如:http://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html#iterator--我沒有發現有關鏈接的任何澄清,無論是。

+0

唯一真正的辦法是嘗試和處理異常,我知道蹩腳。 Collections API不是最優雅的設計API,它應該沒有大多數核心接口的可變和可變版本 – MadProgrammer 2015-02-07 07:53:02

+0

如果您閱讀了鏈接到的TreeSet的類級文檔,這意味着remove()事實上工作。很高興看到一些示例代碼... – 2015-02-07 07:53:26

+0

你最好的選擇是閱讀javadoc。例如'Arrays.asList'說返回的列表具有固定的大小,所以你可以想象它的迭代器不能刪除。大多數「標準」收藏品都是可變的並且允許刪除。 – assylias 2015-02-07 07:58:54

回答

4

有沒有辦法知道這個事前。除非有適當的文件證明remove()是或不被支持(坦率地說,即使它「正確」記錄),你唯一可以肯定的方法就是試試。

+0

我很好奇downvote。這個答案的哪部分在DV的視圖中是不正確的? – Mureinik 2015-02-08 07:57:39

0

數據結構的選擇取決於您打算如何支持,因此在您開始使用它時,您作爲開發人員已經知道底層實現是否支持刪除。

如果實際執行不符合您的假設/理解,將會拋出異常。

相關問題