当前位置: 首页 > news >正文

网站备案 信息个人求职简历ppt模板免费

网站备案 信息,个人求职简历ppt模板免费,大连网站制作师,长沙岳麓区广告公司字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。 1.问题 什么是Fail-fast机制? Hashmap是否拥…

字节面试,问到的一个小知识点,这里做一下总结,其实小编之前有一篇文章,已经对此有过涉及,不过这里知识专项针对于问题,把这个知识点拎出来说一下。

1.问题

什么是Fail-fast机制?
Hashmap是否拥有Fail-fast机制?
ConcurrentModificationException异常原因和解决方法是什么?
哪些你常用的数据结构是Fail-fast的,哪些不是?举例说明一下
Enumeration与Iterator的异同?

在这里插入图片描述

2.探索、解答

2.1 Fail-fast机制

从字面意思,很好理解,就是快速失败机制。映射到java设计中,fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。

2.2 ConcurrentModificationException

List在for、while正常遍历过程中,如果remove元素,容易出现ConcurrentModificationException 异常,根本原因的话,之前ArrayList源码分析文章已经讲过,各位有兴趣可以移步阅读。

ConcurrentModificationException发生是因为我们在使用迭代器遍历List的同时,还使用了List相应的remove、add进行元素增加或删除,导致不一。

2.3 Enumeration与Iterator的异同

2.3.1 Iterator

java中迭代器接口的源码很简单,我们看下面


package java.util;import java.util.function.Consumer;public interface Iterator<E> {boolean hasNext();E next();default void remove() {throw new UnsupportedOperationException("remove");}default void forEachRemaining(Consumer<? super E> action) {Objects.requireNonNull(action);while (hasNext())action.accept(next());}
}

就是遍历、移除的接口定义,这块知识我们在Android源码设计模式探索与实战【迭代器模式】一文中,对于迭代器设计模式,做过深入剖析,迭代器模式重在容器类集合提供顺序遍历的方式,其实从上面Demo、实践案例、源码中,大家都可以看到,迭代器模式,实际上就是把不同类型的集合的遍历进行了封装, 这样针对于客户端来说,只需关注迭代器接口,不再需要关心内部使用了什么类型的集合。

2.3.2 Enumeration

我们看一下这个接口的源码

package java.util;/*** @see     java.util.Iterator* @see     java.io.SequenceInputStream* @see     java.util.Enumeration#nextElement()* @see     java.util.Hashtable* @see     java.util.Hashtable#elements()* @see     java.util.Hashtable#keys()* @see     java.util.Vector* @see     java.util.Vector#elements()** @author  Lee Boynton* @since   JDK1.0*/
public interface Enumeration<E> {boolean hasMoreElements();E nextElement();
}

只有是否还有元素的判断接口、遍历下一个元素的两个方法定义,并没有移除方法,所以这个玩意,自然而然就不存在Fail-fast和ConcurrentModificationException了。

2.3.3 Enumeration与Iterator异同总结

其实一看源码,相信大家就立马明白了,Enumeration与Iterator都是java定义的集合遍历接口,不同的是Iterator提供了移除接口。
有了移除操作,自然而然就是涉及到多线程安全性,那么就引入了可能存在的ConcurrentModificationException。

2.4 Fail-fast举例

哪些你常用的数据结构是Fail-fast的,哪些不是?上面源码的时候,其实大家已经看到了答案。
Arraylist、HashMap(LinkedHashmap、HashSet本身就是继承与Hashmap的)是有Fail-fast机制的,因为他们都有迭代器Iterator。而HashTable、Vector的某些遍历方式是没有的,因为它实现与Enumeration。

 * @see     java.util.Iterator* @see     java.io.SequenceInputStream* @see     java.util.Enumeration#nextElement()* @see     java.util.Hashtable* @see     java.util.Hashtable#elements()* @see     java.util.Hashtable#keys()* @see     java.util.Vector* @see     java.util.Vector#elements()public class Itbird{
public static void main(String[] args){Vector v = new Vector();v.addElement("my");v.addElement("you");Enumeration e = v.elements();//返回Enumeration对象while(e.hasMoreElements()){String value = (String)e.nextElement();//调用nextElement方法获得元素System.out.print(value);}}
}
http://www.yayakq.cn/news/282999/

相关文章:

  • 鄂州市城市建设档案馆网站凯里做网站的公司
  • 锦州网站建设报价软件源码成品资源下载网站
  • 衡水网站建设选哪家找婚庆公司去什么网站
  • 网站建设实战李静网站的组成
  • 涪陵网站建设搜索引擎营销是什么意思
  • 给小学生做家教的网站企业培训课程设置
  • 政务网站建设经验做法个人建站教程
  • 养殖网站 模板全国最缺工100个职业排行出炉
  • 玉林网站推广编程培训机构出来的能找到工作吗
  • 网站开发后端需要哪些技术做房地产网站建设
  • 大学生一个人做网站简洁风格的网站模板免费下载
  • 优酷视频放到网站上怎么做页面模板第三方应用
  • 网站弹窗无法显示保定网站电话
  • 谷歌 网站做推广公司企业形象设计
  • 滁州市建设工程管理处网站学生作业做网站需要什么
  • 深圳市网站建设公司长春
  • 南山模板网站建设公司装修设计公司服务
  • 资兴市网站建设服务商信息免费建站网站有哪些
  • 烟台市住房和城乡建设厅网站wordpress自动发布源码
  • 晋中市住房保障和城乡建设局网站大理州建设局门户网站
  • 如何将网站上传到万网主机网站建设推广语言
  • 互联网广告投放镇江网站关键字优化公司
  • 万网网站根目录最近新闻小学生摘抄
  • wordpress 新媒体主题太原百度seo优化推广
  • 建设管理网站常州网站建设电话
  • html 好的网站单位网络建设的设计方案
  • 有哪些做伦敦金的网站秦皇岛市属于哪个省
  • 全新的手机网站设计seo怎么判断网站的好坏
  • 汽车类网站设计规划图片发到哪些网站 seo
  • 成都网站制作成都新网站建设怎么样