我通过文档(去http://java.sun.com/javase/6/docs/api/java/util/Iterator.html)的Iterator.remove()
存在remove()被描述成
void remove()
Run Code Online (Sandbox Code Playgroud)
从底层集合中移除迭代器返回的最后一个元素(可选操作).每次调用next时,只能调用一次此方法.如果在迭代正在进行中以除调用此方法之外的任何方式修改基础集合,则未指定迭代器的行为.
如果修改了基础集合,则未指定迭代器的行为
Atm*_*ons 13
#1:可选意味着你可以实现它或抛出一个UnsupportedOperationException
#2:此操作是可选的,因为有时您不希望修改迭代器的内容.或者你对"操作的稳健性"有什么理解?
编辑#4:behavior of an iterator is unspecified if the underlying collection is modified
通常,您通过执行使用迭代器
List<String> c = new ArrayList<String>();
c.add("Item 1");
c.add("Item 2");
c.add("Item 3");
...
for (Iterator<String> i = c.iterator(); i.hasNext();)
{
String s = i.next();
...
}
Run Code Online (Sandbox Code Playgroud)
如果你现在想在迭代列表时删除一个项目,你会打电话
c.remove("Item 2");
Run Code Online (Sandbox Code Playgroud)
这不干净,可能会破坏 List/Collection /中的数据,应该避免.相反,通过迭代器删除()项目:
i.remove();
Run Code Online (Sandbox Code Playgroud)
首先java.util.Iterator是一个接口,即协议实现此接口的类如何与世界其他地方相互作用.他们如何实施互动方法是他们的责任.
如果底层数据结构不允许删除,那么remove()将抛出一个UnsupportedOperationException.例如,如果要迭代从DB检索到的结果集,那么实现此方法就没有意义.
如果迭代一些在并发线程之间共享的集合,而另一个线程修改了数据迭代线程,那么将返回不确定的结果.
| 归档时间: |
|
| 查看次数: |
8753 次 |
| 最近记录: |