集合Java HashSet实现不支持remove()的迭代器的最佳方法
我有一个使用HashSet
的类,我希望该类实现Iterable
,但是,我不希望该类迭代器支持remove()
方法
HashSet
的默认迭代器是HashSet.KeyIterator
,它是HashSet
类中的私有类,因此我不能简单地扩展它并重写remove方法
理想情况下,我希望避免为KeyIterator
编写包装器类,但我不知道如何以任何其他方式轻松简单地实现自己的迭代器
有什么想法吗
干杯
皮特
# 1 楼答案
# 2 楼答案
下面是在从迭代器中删除元素时避免此类异常的一种方法
这种实现可以保证在修改迭代器时不会出现异常
# 3 楼答案
使用Composite pattern:创建
Iterator
接口的新实现,该接口是来自HashSet
的迭代器的包装,而不是通过调用remove
抛出UnsupportedOperationException
# 4 楼答案
使用匿名内部类创建包装器相当简单:
请参见此示例:
如果要显式声明该操作不受支持,也可以抛出
UnsupportedOperationException
,但这可能有点过分# 5 楼答案
如果您使用的是Apache Commons集合,则可以使用org.apache.commons.collections.iterators.UnmodifiableIterator :
Guava(Google Collections)还有一个不可修改的迭代器,它支持泛型:^{} 用法: