Leo*_*eon 2 java containers iterator
这个操作安全吗?如果没有,为了做同样的事情,如何编写代码?
Set<Object> set;
......
for (Object o: set) {
if (some_condition) {
set.remove(o);
}
}
Run Code Online (Sandbox Code Playgroud)
不,它不是 - 因为除了通过迭代器之外,你不允许修改你正在迭代的集合.有各种方法可以解决这个问题.这是一个:
for (Iterator<Object> iterator = set.iterator(); iterator.hasNext(); )
{
Object value = iterator.next();
if (someCondition)
{
iterator.remove();
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是构建一个单独的要删除的项目列表,然后在迭代完集后删除它们:
List<Object> itemsToRemove = new ArrayList<Object>();
for (Object x in set)
{
if (someCondition)
{
itemsToRemove.add(x);
}
}
set.removeAll(itemsToRemove);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |