精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

千萬不要再這樣創(chuàng)建集合了!極容易內(nèi)存泄露!

安全 應(yīng)用安全
由于Java語言的集合框架中(collections, 如list, map, set等)沒有提供任何簡(jiǎn)便的語法結(jié)構(gòu),這使得在建立常量集合時(shí)的工作非常繁索。

[[426021]]

由于Java語言的集合框架中(collections, 如list, map, set等)沒有提供任何簡(jiǎn)便的語法結(jié)構(gòu),這使得在建立常量集合時(shí)的工作非常繁索。每次建立時(shí)我們都要做:

1、定義一個(gè)空的集合類變量

2、向這個(gè)結(jié)合類中逐一添加元素

3、將集合做為參數(shù)傳遞給方法

例如,要將一個(gè)Set變量傳給一個(gè)方法:

  1. Set users = new HashSet(); 
  2.  
  3. users.add("Hollis"); 
  4.  
  5. users.add("hollis"); 
  6.  
  7. users.add("HollisChuang"); 
  8.  
  9. users.add("hollis666"); 
  10.  
  11. transferUsers(users); 

這樣的寫法稍微有些復(fù)雜,有沒有簡(jiǎn)潔的方式呢?

雙括號(hào)語法初始化集合

其實(shí)有一個(gè)比較簡(jiǎn)潔的方式,那就是雙括號(hào)語法(double-brace syntax)建立并初始化一個(gè)新的集合:

  1. public class DoubleBraceTest { 
  2.  
  3.      public static void main(String[] args) { 
  4.  
  5.          Set users = new HashSet() {{ 
  6.  
  7.              add("Hollis"); 
  8.  
  9.              add("hollis"); 
  10.  
  11.              add("HollisChuang"); 
  12.  
  13.              add("hollis666"); 
  14.  
  15.          }}; 
  16.  
  17.      } 
  18.  
  19.  } 

同理,創(chuàng)建并初始化一個(gè)HashMap的語法如下:

  1. Map<String,String> users = new HashMap<>() {{ 
  2.  
  3.     put("Hollis","Hollis"); 
  4.  
  5.     put("hollis","hollis"); 
  6.  
  7.     put("HollisChuang","HollisChuang"); 
  8.  
  9. }}; 

不只是Set、Map,jdk中的集合類都可以用這種方式創(chuàng)建并初始化。

當(dāng)我們使用這種雙括號(hào)語法初始化集合類的時(shí)候,在對(duì)Java文件進(jìn)行編譯時(shí),可以發(fā)現(xiàn)一個(gè)奇怪的現(xiàn)象,使用javac對(duì)DoubleBraceTest進(jìn)行編譯:

  1. javac DoubleBraceTest.java 

我們會(huì)發(fā)現(xiàn),得到兩個(gè)class文件:

  1. DoubleBraceTest.class 
  2.  
  3. DoubleBraceTest$1.class 

有經(jīng)驗(yàn)的朋友可能一看到這兩個(gè)文件就會(huì)知道,這里面一定用到了匿名內(nèi)部類。

沒錯(cuò),使用這個(gè)雙括號(hào)初始化的效果是創(chuàng)建匿名內(nèi)部類。創(chuàng)建的類有一個(gè)隱式的this指針指向外部類。

不建議使用這種形式

首先,使用這種形式創(chuàng)建并初始化集合會(huì)導(dǎo)致很多內(nèi)部類被創(chuàng)建。因?yàn)槊看问褂秒p大括號(hào)初始化時(shí),都會(huì)生成一個(gè)新類。如這個(gè)例子:

  1. Map hollis = new HashMap(){{ 
  2.  
  3.     put("firstName""Hollis"); 
  4.  
  5.     put("lastName""Chuang"); 
  6.  
  7.     put("contacts", new HashMap(){{ 
  8.  
  9.         put("0", new HashMap(){{ 
  10.  
  11.             put("blogs""http://www.hollischuang.com"); 
  12.  
  13.         }}); 
  14.  
  15.         put("1", new HashMap(){{ 
  16.  
  17.             put("wechat""hollischuang"); 
  18.  
  19.         }}); 
  20.  
  21.     }}); 
  22.  
  23. }}; 

這會(huì)使得很多內(nèi)部類被創(chuàng)建出來:

  1. DoubleBraceTest$1$1$1.class 
  2.  
  3.  DoubleBraceTest$1$1$2.class 
  4.  
  5.  DoubleBraceTest$1$1.class 
  6.  
  7.  DoubleBraceTest$1.class 
  8.  
  9.  DoubleBraceTest.class 

這些內(nèi)部類被創(chuàng)建出來,是需要被類加載器加載的,這就帶來了一些額外的開銷。

如果您使用上面的代碼在一個(gè)方法中創(chuàng)建并初始化一個(gè)map,并從方法返回該map,那么該方法的調(diào)用者可能會(huì)毫不知情地持有一個(gè)無法進(jìn)行垃圾收集的資源。

  1. public Map getMap() { 
  2.  
  3.      Map hollis = new HashMap(){{ 
  4.  
  5.          put("firstName""Hollis"); 
  6.  
  7.          put("lastName""Chuang"); 
  8.  
  9.          put("contacts", new HashMap(){{ 
  10.  
  11.              put("0", new HashMap(){{ 
  12.  
  13.                  put("blogs""http://www.hollischuang.com"); 
  14.  
  15.              }}); 
  16.  
  17.              put("1", new HashMap(){{ 
  18.  
  19.                  put("wechat""hollischuang"); 
  20.  
  21.              }}); 
  22.  
  23.          }}); 
  24.  
  25.      }}; 
  26.  
  27.      return hollis; 
  28.  
  29.  } 

我們嘗試通過調(diào)用getMap得到這樣一個(gè)通過雙括號(hào)初始化出來的map

  1. public class DoubleBraceTest { 
  2.  
  3.       public static void main(String[] args) { 
  4.  
  5.           DoubleBraceTest doubleBraceTest = new DoubleBraceTest(); 
  6.  
  7.           Map map = doubleBraceTest.getMap(); 
  8.  
  9.       } 
  10.  
  11.   } 

返回的Map現(xiàn)在將包含一個(gè)對(duì)DoubleBraceTest的實(shí)例的引用。讀者可以嘗試這通過debug或者以下方式確認(rèn)這一事實(shí)。

  1. Field field = map.getClass().getDeclaredField("this$0"); 
  2.  
  3. field.setAccessible(true); 
  4.  
  5. System.out.println(field.get(map).getClass()); 

替代方案

很多人使用雙括號(hào)初始化集合,主要是因?yàn)樗容^方便,可以在定義集合的同時(shí)對(duì)他進(jìn)行初始化。

但其實(shí),目前已經(jīng)有很多方案可以做這個(gè)事情了,不需要再使用這種存在風(fēng)險(xiǎn)的方案。

使用Arrays工具類

當(dāng)我們想要初始化一個(gè)List的時(shí)候,可以借助Arrays類,Arrays中提供了asList可以把一個(gè)數(shù)組轉(zhuǎn)換成List:

  1. List<String> list2 = Arrays.asList("hollis ""Hollis""HollisChuang"); 

但是需要注意的是,asList 得到的只是一個(gè) Arrays 的內(nèi)部類,是一個(gè)原來數(shù)組的視圖 List,因此如果對(duì)它進(jìn)行增刪操作會(huì)報(bào)錯(cuò)。

使用Stream

Stream是Java中提供的新特性,他可以對(duì)傳入流內(nèi)部的元素進(jìn)行篩選、排序、聚合等中間操作(intermediate operate),最后由最終操作(terminal operation)得到前面處理的結(jié)果。

我們可以借助Stream來初始化集合:java

  1. List<String> list1 = Stream.of("hollis""Hollis""HollisChuang").collect(Collectors.toList()); 

使用第三方工具類

很多第三方的集合工具類可以實(shí)現(xiàn)這個(gè)功能,如Guava等:

  1. ImmutableMap.of("k1""v1""k2""v2"); 
  2.  
  3. ImmutableList.of("a""b""c""d"); 

關(guān)于Guava和其中定義的不可變集合,我們?cè)诘?9章節(jié)中會(huì)詳細(xì)介紹

Java 9內(nèi)置方法

其實(shí)在Java 9 中,在List、Map等集合類中已經(jīng)內(nèi)置了初始化的方法,如List中包含了12個(gè)重載的of方法,就是來做這個(gè)事情的:

  1. /** 
  2.  
  3.   * Returns an unmodifiable list containing zero elements. 
  4.  
  5.   * 
  6.  
  7.   * See <a href="#unmodifiable">Unmodifiable Lists</a> for details. 
  8.  
  9.   * 
  10.  
  11.   * @param <E> the {@code List}'s element type 
  12.  
  13.   * @return an empty {@code List} 
  14.  
  15.   * 
  16.  
  17.   * @since 9 
  18.  
  19.   */ 
  20.  
  21.  static <E> List<E> of() { 
  22.  
  23.      return ImmutableCollections.emptyList(); 
  24.  
  25.  } 
  26.  
  27.  
  28.  
  29.  static <E> List<E> of(E e1) { 
  30.  
  31.      return new ImmutableCollections.List12<>(e1); 
  32.  
  33.  } 
  34.  
  35.  
  36.  
  37.  static <E> List<E> of(E... elements) { 
  38.  
  39.      switch (elements.length) { // implicit null check of elements 
  40.  
  41.          case 0: 
  42.  
  43.              return ImmutableCollections.emptyList(); 
  44.  
  45.          case 1: 
  46.  
  47.              return new ImmutableCollections.List12<>(elements[0]); 
  48.  
  49.          case 2: 
  50.  
  51.              return new ImmutableCollections.List12<>(elements[0], elements[1]); 
  52.  
  53.          default
  54.  
  55.              return new ImmutableCollections.ListN<>(elements); 
  56.  
  57.      } 
  58.  
  59.  } 

 

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2024-12-30 08:22:35

2020-04-03 08:30:44

RabbitMQKafka軟件

2019-11-18 10:05:43

程序員技能開發(fā)者

2019-11-18 10:16:37

工程師開發(fā)網(wǎng)絡(luò)

2015-04-27 09:12:04

JS魔法堂IE內(nèi)存泄露

2024-11-20 18:16:39

MyBatis批量操作數(shù)據(jù)庫(kù)

2022-09-20 18:27:31

Kubernetes云服務(wù)

2013-08-19 11:03:21

微軟谷歌

2025-08-18 09:35:02

2017-05-24 11:44:17

Linux命令

2012-03-14 14:25:57

2019-04-03 14:03:58

Linux命令運(yùn)行

2019-03-11 15:26:26

HTTPSHTTP密鑰

2019-10-25 09:35:58

HTTPSHTTP通信

2019-11-13 09:08:50

HTTPS安全加密算法

2024-06-27 08:36:12

Lodash對(duì)象類型isObject?

2009-09-12 10:59:37

2019-11-28 18:51:07

PythonPHP編程語言

2012-03-28 22:06:15

Android

2020-07-09 14:40:31

程序員技能開發(fā)者
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

老司机午夜精品| 琪琪久久久久日韩精品| 亚洲色图19p| 国产精品v欧美精品∨日韩| 免费在线不卡视频| 清纯唯美亚洲综合一区| 日韩精品一区二区三区swag| 69堂免费视频| 国产乱色在线观看| 成人国产在线观看| 国产精品久久久久999| 欧美成人免费观看视频| 你微笑时很美电视剧整集高清不卡 | 欧美一区二区| 亚洲视频在线免费看| 亚洲AV成人精品| 日本精品另类| 婷婷开心激情综合| 五月天色婷婷综合| 激情福利在线| av电影天堂一区二区在线观看| 国产视频999| 日本中文字幕久久| 一区在线免费| 麻豆一区二区在线观看| 亚洲女优在线观看| 久久动漫网址| 日韩精品影音先锋| 天天操天天干天天做| 中文字幕不卡三区视频| 亚洲一区二区av在线| 中文字幕av日韩精品| 毛片免费在线观看| 97se亚洲国产综合自在线| 7777精品久久久大香线蕉小说| 国产情侣呻吟对白高潮| 性8sex亚洲区入口| 91成人福利在线| 久视频在线观看| 中文在线日韩| 久久精品成人一区二区三区| 一级片久久久久| 宅男在线一区| 亚洲精品一区av在线播放| 精品人妻在线视频| 日韩一二三区在线观看| 91精品国产入口| 污污视频网站在线| 一区二区三区无毛| 欧美乱熟臀69xxxxxx| 中文av一区二区三区| 日日骚av一区二区| 综合天堂av久久久久久久| 在线视频一区二区| 成人在线观看免费高清| 精品一区二区三区的国产在线观看| 亚洲国产精品久久久久久| 性感美女一区二区三区| xxxx日韩| 亚洲精品xxxx| 中文字幕一区二区三区人妻| 一本久久青青| 国产亚洲aⅴaaaaaa毛片| 免费看日本黄色片| 青青草国产成人a∨下载安卓| 亚洲视频一区二区| 麻豆一区在线观看| 亚洲影视一区| 久久久女女女女999久久| 五月天综合在线| 香蕉久久夜色精品国产| 国产精品美女在线观看| 一级特黄aa大片| 国产精品一区一区三区| 国产一级特黄a大片99| 日本大臀精品| 国产欧美一区二区在线观看| 一区二区三区久久网| a级网站在线播放| 亚洲成人一二三| 99re在线视频免费观看| 巨大黑人极品videos精品| 在线综合视频播放| 95视频在线观看| 免费欧美激情| 久久精品国产精品| 国产午夜福利精品| 免费在线观看成人| 爱情岛论坛亚洲入口| 青青草免费观看免费视频在线| 日本一区二区三级电影在线观看| 亚洲综合首页| 人成在线免费网站| 欧美人与z0zoxxxx视频| 老熟妇精品一区二区三区| 欧美精品乱码| 欧美日韩成人精品| 免费在线观看av的网站| 国产电影一区在线| 日本精品一区二区三区高清 久久| 毛片网站在线免费观看| 欧美日韩国产影院| 色男人天堂av| 九热爱视频精品视频| 久久天堂电影网| 天天干天天干天天操| 国产乱子轮精品视频| 欧美日韩亚洲一区二区三区四区| h网站久久久| 色哟哟一区二区在线观看| 午夜影院免费版| 国模精品一区| 97不卡在线视频| 国产成人三级一区二区在线观看一 | 国产 xxxx| 久久人人88| 欧美在线亚洲在线| 免费观看a视频| 1000部国产精品成人观看| 国产肥臀一区二区福利视频| 欧美日韩中出| 精品久久久av| 国产一级片一区二区| 91在线码无精品| av在线com| 免费看日产一区二区三区| www.日韩欧美| 乱子伦一区二区三区| 不卡av免费在线观看| 男女啪啪免费观看| av一级久久| www.日韩视频| 一本一道人人妻人人妻αv| 国产亚洲一本大道中文在线| 国产伦精品一区二区三区四区视频_ | 欧美网站在线| 91久久在线播放| 在线免费看a| 欧美性猛交xxxx乱大交退制版| 手机av免费看| 久久中文在线| 日韩在线三级| 全球最大av网站久久| 亚洲视频第一页| 免费黄色av片| 欧美国产禁国产网站cc| 免费涩涩18网站入口| 国产成人影院| 国产精品久久9| 尤物在线视频| 欧美人与z0zoxxxx视频| 欧美h片在线观看| 九九九久久久精品| 中文字幕精品在线播放| 亚洲精品国产九九九| 欧美日韩第一视频| 国产成人无码www免费视频播放| 亚洲国产日韩在线一区模特| 成年人小视频在线观看| 日韩午夜一区| 日韩av一级大片| 国产精品99久久久久久董美香| 久久精品美女视频网站| 精品国产av一区二区三区| 亚洲综合一二区| 亚洲天堂资源在线| 日韩极品在线观看| 中文字幕一区二区三区有限公司| 九九99久久精品在免费线bt| 欧美精品久久久久a| 婷婷视频在线观看| 在线观看视频欧美| 国产传媒免费在线观看| 成人国产精品免费观看视频| www国产精品内射老熟女| 国产精品亚洲人成在99www| 国产精品人成电影在线观看| av官网在线播放| 亚洲精品久久久久| 中文人妻熟女乱又乱精品| 怡红院av一区二区三区| 国产熟妇搡bbbb搡bbbb| 精品在线播放午夜| 久久精品视频16| 日韩一区电影| 国产伦精品一区二区三区免 | 不卡日韩av| 神马久久午夜| 久久精品夜夜夜夜夜久久| 日韩在线视频第一页| 91福利国产成人精品照片| 国产少妇在线观看| 91麻豆免费看| 亚洲制服中文字幕| 亚洲制服少妇| 好色先生视频污| 美女毛片一区二区三区四区| 亚洲一区二区日本| 久久uomeier| 欧美精品电影免费在线观看| aⅴ在线视频男人的天堂 | 北岛玲一区二区三区| 精品伦理精品一区| 亚洲图片在线播放| 欧美日韩国产在线| 久久久久久久蜜桃| 亚洲国产精品t66y| 人妻丰满熟妇aⅴ无码| 国产麻豆精品视频| 九色91popny| 国产精品视频久久一区| 97碰在线视频| 91成人精品| 色之综合天天综合色天天棕色| 里番精品3d一二三区| 亚洲专区在线视频| 成人国产精选| 人人做人人澡人人爽欧美| 91黄页在线观看| 色综合91久久精品中文字幕| 看黄网站在线| 主播福利视频一区| 国产三级视频在线| 亚洲美女在线视频| 无码精品在线观看| 精品国产凹凸成av人导航| 国产女人高潮时对白| 欧美日韩二区三区| 中国女人一级一次看片| 色婷婷综合久久久中文一区二区 | 日韩一区二区三区在线观看 | 蜜桃免费网站一区二区三区| 欧美黄色免费影院| 国产亚洲精品v| 免费看又黄又无码的网站| 黄色免费成人| 日韩人妻无码精品久久久不卡| 综合久久99| 成人在线免费观看网址| 亚洲二区三区不卡| 日韩人妻精品一区二区三区| 亚洲成人日韩| avove在线观看| 综合久久99| 国产精品久久久久久久乖乖| 亚洲午夜极品| 日韩欧美一区三区| 久久av最新网址| 爆乳熟妇一区二区三区霸乳| 视频一区二区不卡| 五月天婷婷激情视频| 美国三级日本三级久久99| 欧美女同在线观看| 国产在线看一区| 亚洲欧美综合视频| www.日韩在线| 中文字幕国产综合| 国产精品欧美一区喷水| 搜索黄色一级片| 夜夜嗨av一区二区三区网页 | 日本爱爱爱视频| 欧美国产97人人爽人人喊| 成年人免费视频播放| 亚洲视频免费看| 中文字幕在线2021| 午夜在线成人av| 成人公开免费视频| 7777精品伊人久久久大香线蕉| 精品国产av一区二区三区| 精品99一区二区| 秋霞av在线| 最近日韩中文字幕中文| 97超碰在线公开在线看免费| 欧美极品少妇与黑人| 伊人久久av| 91精品在线一区| 国产丝袜一区| 日本一区二区三区视频在线播放| 欧美r级电影| 国产小视频免费| 免费中文字幕日韩欧美| 亚洲网中文字幕| 91捆绑美女网站| 午夜剧场免费在线观看| 精品日韩中文字幕| 亚洲系列第一页| 亚洲国产另类久久精品| eeuss影院www在线播放| 欧美寡妇偷汉性猛交| 日韩免费福利视频| 91在线播放视频| 国产永久精品大片wwwapp| 18视频在线观看娇喘| 性欧美videos另类喷潮| 涩多多在线观看| 国产亚洲精品超碰| 久久免费在线观看视频| 欧美午夜影院一区| 天天干免费视频| 久久精品成人欧美大片| 欧美日韩免费看片| 翡翠波斯猫1977年美国| 欧美日韩在线网站| 2018日日夜夜| 国产一区二区0| 国产视频三区四区| 五月婷婷激情综合| 国产特级黄色片| 国产亚洲精品va在线观看| sm在线播放| 99在线观看视频网站| 欧美电影《轻佻寡妇》| 青青青在线播放| eeuss鲁片一区二区三区在线观看| 天海翼在线视频| 欧美色综合久久| 国产在线视频你懂得| 97香蕉久久夜色精品国产| 精品一区二区三区四区五区| 亚洲精品影院| 日韩成人精品在线观看| 精品少妇一区二区三区免费观| 亚洲国产精品一区二区久久恐怖片 | 亚洲精品国产精品国自产在线| 在线播放免费av| 亚洲一区二区自拍| 五月天久久777| 在线观看免费的av| 国产精品视频在线看| 九九热最新视频| 亚洲人成在线一二| 日韩大尺度黄色| 欧美三级网色| 日韩电影免费一区| 精品欧美一区二区久久久| 欧美日韩一区二区在线播放| 天天操天天射天天| 91精品国产色综合| 五月天亚洲一区| 97成人在线观看视频| 91影院在线观看| 在线观看日本网站| 中文字幕av一区中文字幕天堂| 免费高清视频在线一区| 天堂精品视频| 精品写真视频在线观看| 成人高潮免费视频| 日韩区在线观看| wwwww亚洲| 精品无人区一区二区三区| 亚洲一区二区三区四区五区午夜| 中文字字幕码一二三区| 色综合天天综合网国产成人综合天| 日韩三级电影网| 国产成人精品亚洲精品| 日韩精品一区二区久久| 天天综合成人网| 亚洲一区二区欧美日韩| 亚洲人妻一区二区| 91精品国产高清| 精品久久久久久久久久久下田| 九热视频在线观看| 日韩毛片视频在线看| 性生活免费网站| 国产91精品久久久久久| 精品国产一区二区三区香蕉沈先生 | 久久午夜免费视频| 欧美精品一区二区三区很污很色的| 激情黄产视频在线免费观看| 欧美精品七区| 久久99精品国产麻豆婷婷洗澡| 三级影片在线看| 亚洲精品大尺度| 国产精品久久久久久久久免费高清 | 色婷婷激情综合| 三区四区电影在线观看| yy111111少妇影院日韩夜片| 免费永久网站黄欧美| 手机免费观看av| 精品国产伦一区二区三区观看方式 | 激情成人亚洲| 国产精品久久久久久久av| 欧美大片一区二区| 最新日韩三级| 久久亚洲国产成人精品无码区| 久久久久久久综合| 国产内射老熟女aaaa∵| 日本精品免费观看| 午夜日韩视频| 亚洲欧美va天堂人熟伦| 欧美成人一区二区| 亚洲成人不卡| 台湾无码一区二区| 国产欧美视频一区二区| 成人午夜免费在线观看| 国产精品日韩av| 国产亚洲精品bv在线观看| 婷婷伊人五月天| 国产一区二区日韩| 国内精品偷拍|