Jef*_*ter 12 c# java ienumerator iterator
在C#中,IEnumerator接口定义了一种遍历集合并查看元素的方法.我认为这非常有用,因为如果你传递IEnumerable<T>给一个方法,它不会修改原始来源.
但是,在Java中,Iterator将删除操作定义为(可选!)允许删除元素.传递Iterable<T>给方法没有任何优势,因为该方法仍然可以修改原始集合.
remove的optionalness是示例拒绝遗赠气味,但忽略了(已经讨论过在这里)我很感兴趣的设计决策,促使一个remove事件要在接口上实现.
导致remove被添加的设计决策是Iterator什么?
换句话说,明确没有remove定义的C#设计决策是IEnumerator什么?
Iterator能够在迭代期间删除元素.您不能使用迭代器迭代集合,并使用remove()该集合的方法从目标集合中删除元素.您将ConcurrentModificationException接下来调用,Iterator.next()因为迭代器无法知道集合的确切变化,也无法知道如何继续迭代.
当您使用remove()迭代器时,它知道如何更改集合.而且实际上你不能删除任何集合元素但只删除当前元素.这简化了迭代的继续.
关于传递迭代器或Iterable的优点:您可以随时使用Collection.unmodifireableSet()或Collection.unmodifireableList()防止修改您的集合.
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |