幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

跟着Guava学Java之不可变集合

  什么是不可变集合
  不可变集合,英文叫immutable,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。为什么要用不可变集合?
  第一:防御性编程需要
  我有一个集合,你拿来使用,鬼知道你会不会乱搞,往集合里添加不合适的元素,或者随便删除元素,我不放心,对,就是不信你,我的集合我做主,给你个不可变的吧,这样你就不可能乱搞我的集合了,我就放心了,不担心你的操作给我带来风险。官方解释:防御,defensiveprogramming,听起来高级不?
  第二:线程安全
  没有买卖就没有杀害!
  集合是不可变的,不让你有变化,不可能有变化。没有变化,就没有竞态条件,多少个线程来都是一个样,安全,就是安全。
  第三:节省开销
  不需要支持可变性,可以尽量节省空间和时间的开销,所有的不可变集合实现都比可变集合更加有效的利用内存。JDK9之前的实现
  Collections提供了一组方法把可变集合封装成不可变集合:
  但这玩意儿有问题,举个例子:ListStringlistnewArrayListString();list。add(a);list。add(b);list。add(c);ListStringunmodifiableListCollections。unmodifiableList(list);list。add(d);System。out。println(unmodifiableList);
  这个输出的结果居然是〔a,b,c,d〕
  what?这不就变了吗,我要的是不可变集合啊,这坑爹的玩意儿。有兄弟说了,那我切断list的引用是不就行了?ListStringlistnewArrayListString();list。add(a);list。add(b);list。add(c);ListStringunmodifiableListCollections。unmodifiableList(list);list。add(d);listnull;System。out。println(unmodifiableList);
  呵呵,不行,输出仍然是〔a,b,c,d〕果然坑爹,而且你发现没有,编码也比较麻烦,还得用Collections间接转一下。
  Collections。unmodifiableList实现的不是真正的不可变集合,当原始集合修改后,不可变集合也发生变化。此外,它返回的数据结构本质仍旧是原来的集合类,所以它的操作开销,包括并发下修改检查,hashtable里的额外数据空间都和原来的集合是一样的。
  由于这些问题,JDK9出了些新的生成不可变集合的方法,比如List。ofSet。ofMap。of。。。。。。
  确实可以直接生成不可变集合,编码也比较方便了:ListStringimmutableListList。of(a,b,c);
  如果你要修改集合会抛出异常java。lang。UnsupportedOperationException:immutableList。add(d);
  butListStringlistnewArrayListString();list。add(a);list。add(b);list。add(c);ListListStringlist1List。of(list);list。add(d);System。out。println(list1);
  上面代码的输出仍然是:〔a,b,c,d〕
  当然我们不是说人家api是错的,人家就是这么设计的(爱信不信),可我感觉不爽,如果不小心可能会犯错,本来是防御性编程,搞不好干成跑路性编程了。
  再次强调,不是说人家JDK设计错了,人家就是这么设计的,你的明白?当然不爽的还有google的工程师们,所以我们下面介绍下拿起键盘自己解决问题的google工程师们写的guava是怎么解决问题的。Guava
  来,我们接着上面的那个例子,直接写个guava版本的你自己体会下:ListStringlistnewArrayListString();list。add(a);list。add(b);list。add(c);ImmutableListStringstringsImmutableList。copyOf(list);list。add(d);System。out。println(strings);
  输出终于如我所愿的是:〔a,b,c〕了。
  无论是从命名、语义、结果、代码可读性是不是都比JDK版本的好很多?这样的代码让我感觉世界又美好了一些。
  美好的东西都想拥有,但问题来了,guava针对哪些集合提供了哪些对应的不可变集合类呢,这里我们给大家整理了一下:
  可变集合接口属于JDK还是Guava不可变版本CollectionJDKImmutableCollectionListJDKImmutableListSetJDKImmutableSetSortedSetNavigableSetJDKImmutableSortedSetMapJDKImmutableMapSortedMapJDKImmutableSortedMapMultisetGuavaImmutableMultisetSortedMultisetGuavaImmutableSortedMultisetMultimapGuavaImmutableMultimapListMultimapGuavaImmutableListMultimapSetMultimapGuavaImmutableSetMultimapBiMapGuavaImmutableBiMapClassToInstanceMapGuavaImmutableClassToInstanceMapTableGuavaImmutableTable
  介绍几个方法:of方法,用法是一脉相承的,就是构建集合用的copyOf,上面例子中出现过,官方文档上说它是智能的,比如它可以判断参数是不是一个immutable对象,这样可以避免做拷贝JDK10ListStringlistnewArrayListString();list。add(a);list。add(b);list。add(c);ListStringstringsList。copyOf(list);list。add(d);System。out。println(strings);
  以上代码在JDK10以上版本输出:〔a,b,c〕,主要是因为copyOf方法是10以上版本才有的。
  你看,JDK也一直在进步,所以如果你用的是JDK10以及上版本,是不是要用Guava在这个具体功能点上就是可选的了。最后
  整体对比起来,我的个人感觉是在不可变集合的操作上guava的API更好用一些,当然库的使用因人而异,用JDK原生的也没毛病,毕竟依赖更少,学习成本也小。
  我们总说要改革、要进步,而真正的改革往往都不是自上而下的,很多都是自下而上的被推动着前进,如果没有Guava,没有开源社区的很多优秀的库和组件,JDK会不会把这些优秀的建议吸取进来?我不知道,但至少JAVA也一直在进步,也希望它越来越好。

原神老角色强度分析老角色里,练好的c还有进一步更新圣遗物的机会,用着还是不错的,深渊满星不是问题,而原本的辅助还是YYDS,且不说六星火神六星水神,叶天帝(虽然不是常驻有点跑题)和大数字必备莫娜……科尔安东尼1777魔术胜掘金!戈登3714NBA常规赛2月10日继续进行,本场比赛穆雷缺阵,最终,魔术以115104战胜掘金。首节开始,约基奇、波特和戈登合力打出120开局!魔术迅速回敬一波196反超比分!波普发……欧洲2035年全面禁燃,内燃机还能否一战?随着新能源汽车技术的不断提高,环保意识的不断加强,电动汽车已经成为了市场的大趋势。2月14日,欧洲议会在斯特拉斯堡以340票赞成,279票反对和21票弃权,通过了《203……带你读诗拨动了阳光的琴弦拨动了阳光的琴弦在这美妙的早晨我拨动了阳光的琴弦小鸟是飞舞的音符萦绕在我的窗前生活原本是歌充满无限欢乐只要你用心体会就会轻松获得……走读东莞战新产业基地临深基地为高端电子信息产业再添新动能5个重大项目于去年先后投产或局部投产,新增产值71。9亿元;引进投资规模5亿元以上或专精特新小巨人企业投资的项目3宗,其中10亿元以上重大项目2宗,预计年产值超过180亿元;投……湖人篮网包揽联盟得分前五,詹姆斯冲击40000分,哈登有望3湖人与篮网在休赛期都组建了自己的超级球队,这两支球队也都是标准的三巨头,而且还都是联盟顶级球星组成的三巨头,而且至少有一名MVP级别的球员。湖人三巨头是詹姆斯、浓眉与威少,值得……家长们注意,这种奶茶杯孩子不能碰家长们请注意!这种奶茶杯小心是电子烟!图源:人民网科普(奶茶杯电子烟的包装无中文标记)包装成奶茶杯的电子烟看似好玩千万别碰!前不久,一位博主……那些年,我们玩过的游戏人有时很奇怪,突然就变了。就比如曾经自己沉迷于各种各样的游戏,电脑游戏,掌机游戏,从小就喜欢玩。小时候最开始接触的是玩具,后来出现了小霸王,一句小霸王其乐无穷唤起了很多8……生活的路上,多一点安慰,多一点关爱每天怱怱地来,怱怱地去。思想觉悟低的。就说为了工作,为了生活。为了生存。思想觉悟高的,就说,为了理想,为了社会。全心全意为人民服务。望着南来北往的车辆,似曾相识。望着车厢……日月光93亿卖掉大陆4家芯片封测工厂,更像是在跑路前几天,大家被一则消息振奋了,那就是全球最牛的芯片封测企业日月光,以14。6亿美元(约93亿元)的价格,将位于中国大陆的4家芯片封测厂,卖给了中国资本智路资本。一时之间,……官宣!湖人雪上加霜,火箭伤病更新,篮网续约达成,勇士队坏消息北京时间12月27日,NBA在今天传来数条猛料,比如奇才队后卫丁威迪和361签下一份多年球鞋代言合同,公牛队与麦金尼签约至赛季结束,湖人队不会与小托马斯续签,除了这些消息之外,……9。9元起!这5款小米产品搞定你的通勤EDC装备EDC全称是EverydayCarry,可以理解为每日通勤随身装备。很多网友都热衷于交流EDC,分享自己找到的随身好物。在这里我帮大家梳理了几款小米最值得入手的通勤EDC装备,……
这板块火了!机构发话了见习记者雨田十一黄金周即将到来,餐饮旅游、航空运输及机场板块今日大涨,开启国庆行情。截至中午收盘,Wind餐饮旅游指数涨5。11,收于13095点;Wind航空运输精选指……生活不是这样,就是那样,反正不是你想的那样别吝啬嘴角的微笑,别让烦恼挂上眉梢。别指望别人都懂你,因为萝卜青菜各有所爱。那些避而不谈的往往才是真相。任何真话都可以接受,怕就怕没有一句真话。有……我国时速160公里客车技术,首次国际输出11月3日,中车唐山公司研制的我国出口巴基斯坦首批46辆宽轨客车和169箱备品备件,在天津港码头全部装载上货轮,发往巴基斯坦卡拉奇港。这是我国时速160公里客车技术首次实现国际……篮网如何摆脱困境?美媒送2笔双赢交易方案3换1押宝盖帽王在坐拥豪阵的情况下,本赛季篮网的表现依旧一塌糊涂,赛季至今仅取得了2胜6负的战绩,排在东部倒数第三,仅比重建中的魔术与活塞好一点,为此球队火速解雇了主帅纳什,但依旧没止住球队连……拿着500元人民币在尼泊尔能做什么?当地人可以在这里呆好几天尼泊尔是一个充满了神秘色彩的国家,让很多游客都很好奇。它位于喜马拉雅山的南边,和我国西藏自治区接壤,周围都是高山河流,寺庙众多,被称为寺庙之国和高山之国。尼泊尔是中国很好的邻国……去意已决!穆里尼奥将转投皇马?罗马或签下国脚强援对于穆里尼奥来说,在执教罗马队一个赛季以来,他的表现基本上达到了预期。在执教球队的第一个赛季里,穆里尼奥带队拿到了一座冠军奖杯,并锁定了欧联杯的参赛资格。本赛季,罗马队在联赛和……禹唐商学院DHL的体育营销关键词DHL以开放包容的理念,在传统赛事如赛车、足球的基础上,还进军数字体育领域,开创了物流行业在虚拟赛车、电子竞技等体育行业的新潮流。(图为DHL赞助的F1赛车现场,F1是D……李少莉再次露面,重返岗位,打扮低调,事件到此结束了?这些天,李少莉给人的印象是,虽然年龄不在年轻,但仍然十分漂亮,不管是穿着,还是化妆,水平都不亚于明星的化妆师。有网友说,她可能是今年同龄人中最美的女发言人。发布会上……颜值高峰!藏在这座千年古城的原生态美景,秋色正撩人风吹一片叶,万物已惊秋。秋日里的大青山,即便不似春光明媚,却也别有意趣。秋韵里的大青山,不止有壮丽纷飞的落叶雨,裹挟着清爽凉意的晚风,……吃得再多也不长肉,这到底是什么样的身体?其实,这未必是正常的在日常生活中,有这么一群人十分烦恼,那他们苦恼什么呢?让胖人始终无法想到的是:为什么吃得再多也不长肉,这到底是什么样的身体?偏偏自己却恰恰相反,怎么减都减不下去呢?大家不……命运的天空(原创)你我都是小丑命运突然心血来潮,下了一个鱼饵望着我们上钩似笑非笑,似恼非恼许多事情不是不明白只是贪心想赌个例外用尽全身心的力气依旧逃不出……2022。10。8读书笔记(第198天)一个人最好的修养,是第六章缓解情绪压力的九条法则敢于接受工作挑战,获得满满的成就感无论是什么样的工作,压力和困难总是会接连不断地到来。是选择接受挑战还是选择退让,每个人的选择都不一样。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网