Java如何循环删除某集合中的多个元素
作者:网络转载 发布时间:[ 2013/1/31 11:08:49 ] 推荐标签:
看来,删除集合中的元素,简单的方法,是使用Iterator的remove()方法了!
让我们看看ArrayList类提供的Iterator是怎样实现的。
privateclass Itr implements Iterator<E> {
/**
这是元素的索引,相当于一个指针,或者游标,利用它来访问List的数据元素。
*Indexofelementtobereturnedbysubsequentcalltonext.
*/
intcursor = 0;
/**
*Indexofelementreturnedbymostrecentcalltonextor
*previous. Resetto-1ifthiselementisdeletedbyacall
*toremove.
新元素的索引。如果已经删除了该元素,设为-1
*/
intlastRet = -1;
/**
外部类ArrayList的属性:
protected transient int modCount = 0;
它用于观察ArrayList是否同时在被其他线程修改,如果不一致,那么会抛出同步异常。
*ThemodCountvaluethattheiteratorbelievesthatthebacking
*Listshouldhave. Ifthisexpectationisviolated,theiterator
*hasdetectedconcurrentmodification.
*/
intexpectedModCount = modCount;
//如果游标没有达到List的尺寸,那么还有元素。
publicboolean hasNext() {
returncursor != size();
}
//返回当前元素,然后游标+1。近索引 也= 返回的元素的索引。
public E next() {
checkForComodification();
try {
E next = get(cursor);
lastRet = cursor++;
return next;
} catch (IndexOutOfBoundsException e) {
checkForComodification();
thrownew NoSuchElementException();
}
}
/*
删除元素,是删除当前元素,并且把游标-1。因为,List会把后面的元素全部移前一位。
*/
publicvoid remove() {
if (lastRet == -1)
thrownew IllegalStateException();
checkForComodification();
try {
AbstractList.this.remove(lastRet);
if (lastRet < cursor)
cursor--;
lastRet = -1;
expectedModCount = modCount;
} catch (IndexOutOfBoundsException e) {
thrownew ConcurrentModificationException();
}
}
finalvoid checkForComodification() {
if (modCount != expectedModCount)
thrownew ConcurrentModificationException();
}
}
privateclass Itr implements Iterator<E> { /** 这是元素的索引,相当于一个指针,或者游标,利用它来访问List的数据元素。 *Indexofelementtobereturnedbysubsequentcalltonext. */ intcursor = 0; /** *Indexofelementreturnedbymostrecentcalltonextor *previous. Resetto-1ifthiselementisdeletedbyacall *toremove. 新元素的索引。如果已经删除了该元素,设为-1 */ intlastRet = -1; /** 外部类ArrayList的属性: protected transient int modCount = 0; 它用于观察ArrayList是否同时在被其他线程修改,如果不一致,那么会抛出同步异常。 *ThemodCountvaluethattheiteratorbelievesthatthebacking *Listshouldhave. Ifthisexpectationisviolated,theiterator *hasdetectedconcurrentmodification. */ intexpectedModCount = modCount; //如果游标没有达到List的尺寸,那么还有元素。 publicboolean hasNext() { returncursor != size(); } //返回当前元素,然后游标+1。近索引 也= 返回的元素的索引。 public E next() { checkForComodification(); try { E next = get(cursor); lastRet = cursor++; return next; } catch (IndexOutOfBoundsException e) { checkForComodification(); thrownew NoSuchElementException(); } } /* 删除元素,是删除当前元素,并且把游标-1。因为,List会把后面的元素全部移前一位。 */ publicvoid remove() { if (lastRet == -1) thrownew IllegalStateException(); checkForComodification(); try { AbstractList.this.remove(lastRet); if (lastRet < cursor) cursor--; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException e) { thrownew ConcurrentModificationException(); } } finalvoid checkForComodification() { if (modCount != expectedModCount) thrownew ConcurrentModificationException(); } }
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11