如何进行java在hashmap初始化时赋初值过程的解析-创新互联

如何进行java在hashmap初始化时赋初值过程的解析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联公司成立以来不断整合自身及行业资源、不断突破观念以使企业策略得到完善和成熟,建立了一套“以技术为基点,以客户需求中心、市场为导向”的快速反应体系。对公司的主营项目,如中高端企业网站企划 / 设计、行业 / 企业门户设计推广、行业门户平台运营、成都App制作、手机网站开发、微信网站制作、软件开发、服务器托管等实行标准化操作,让客户可以直观的预知到从成都创新互联公司可以获得的服务效果。

Java中的HashMap是一种常用的数据结构,一般用来做数据字典或者Hash查找的容器。

一般我们初始化并赋初值是这样做的:

HashMap map = new HashMap<>();map.put("name", "yanggb"); map.put("lover", "huangq");

但是有时候我们会想在一个表达式中完成初始化并赋初值的操作:

HashMap map = new HashMap<>() {  {    put("name", "yanggb");    put("lover", "huangq");  }};

这里用了双括号【{{}}】来初始化,使代码简洁易读。第一层括弧实际是定义了一个匿名内部类 (Anonymous Inner Class),第二层括弧实际上是一个实例初始化块 (Instance Initializer Block),这个块在内部匿名类构造时被执行。这种写法的好处很明显,就是一目了然。但是这种写法可能导致这个对象串行化失败的问题。

其一,因为这种方式是匿名内部类的声明方式,所以引用中持有着外部类的引用。所以当串行化这个集合时,外部类也会被不知不觉的串行化,而当外部类没有实现Serialize接口时,就会报错。

其二,在上面的例子中,其实是声明了一个继承自HashMap的子类,然而有些串行化方法,例如要通过Gson串行化为json,或者要串行化为xml时,类库中提供的方式,是无法串行化Hashset或者HashMap的子类的,也就导致了串行化失败。解决办法是重新初始化为一个HashMap对象【new HashMap(map);】,这样就可以正常进行初始化了。

另外要注意的是,这种使用双括号进行初始化的语法在执行效率上要比普通的初始化写法要稍低。

最后,这个使用双括号进行初始化的语法同样适用于ArrayList和Set等集合。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


网站题目:如何进行java在hashmap初始化时赋初值过程的解析-创新互联
URL链接:http://ybzwz.com/article/ggspj.html