2015-02-07 52 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

数据结构的选择取决于您打算如何支持,因此在您开始使用它时,您作为开发人员已经知道底层实现是否支持删除。

如果实际执行不符合您的假设/理解,将会抛出异常。

相关问题