专业的JAVA编程教程与资源

网站首页 > java教程 正文

那些年背过又忘记的Java面试题(非常值得一看的java面试题)

temp10 2024-09-08 09:37:28 java教程 17 ℃ 0 评论

那些年背过又忘记的Java面试题。List遍历快速和安全失败

那些年背过又忘记的Java面试题(非常值得一看的java面试题)

①普通for循环遍历List删除指定元素

for(int i=0; i < list.size(); i++){

if(list.get(i) == 5)

list.remove(i);

}

② 迭代遍历,用list.remove(i)方法删除元素Iterator it = list.iterator()

while(it.hasNext()){

Integer value = it.next();

if(value == 5){

list.remove(value);

}}

③foreach遍历List删除元素

for(Integer i:list){

if(i==3) list.remove(i)

;}

fail—fast:快速失败当异常产生时,直接抛出异常,程序终止。fail-fast主要是体现在当我们在遍历集合元素的时候,经常会使用迭代器,但在迭代器遍历元素的过程中,

如果集合的结构(modCount)被改变的话,就会抛出异常ConcurrentModificationException,防止继续遍历。这就是所谓的快速失败机制。fail—safe:安全失败采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。由于在遍历过程中对原集合所作的修改并不能被迭代器检测到,

所以不会触发ConcurrentModificationException。

缺点:基于拷贝内容的优点是避免了ConcurrentModificationException,但同样地,迭代器并不能访问到修改后的内容,即:迭代器遍历的是开始遍历那一刻拿到的集合拷贝,在遍历期间原集合发生的修改迭代器是不知道的。

场景:java.util.concurrent包下的容器都是安全失败,可以在多线程下并发使用,并发修改。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表